[英]Partially allocating a buffer for recv
我需要编写一个Windows sockets应用程序来工作,但是几乎没有网络编程经验,我需要一点帮助。
我需要做几个函数来从服务器请求不同的数据,让我们使用其中之一,例如随机数。
DWORD GetRandomNumbers(int amount, int* buffer, int bufferSize);
该方法返回一个表示成功或错误消息的DWORD,并且必须从可以像这样调用它的调用函数中获取缓冲区:
int numbers[10];
GetRandomNumbers(10,numbers,10);
函数内部:
//set up packet containing request
//send the packet
//then call recv
recv(m_socket, (char*)buffer, bufferSize, 0);
//now cast the char array to a struct defining the incoming message packet
RandNumPacketIn* p = (RandNumPacketIn*)buffer;
好。 现在在“ p”中是来自服务器的随机数数组-太好了! 除“ p”外,还包含其他数据,这些数据是传入数据包的一部分。 我想要的是当我完成后传入的缓冲区,其中仅包含随机数。 如果我知道传入数据包的结构,它就像:
struct incomingrandnums
{
int a;
int b;
char c;
int numbers[100];
}
是否可以在函数中创建char *并为数据包中的前三个成员分配内存,然后仅将传入的缓冲区memcpy结束? 也许不完全一样,但是让我有点不解,结果应该是调用函数可以创建一个整数数组,将其地址传递给该函数,并且在完成后,调用函数中的数组仅包含随机数,在收到的数据包中。 在明天工作之前,我无法进行测试,但是我一直在想。
谢谢。
您将需要使用两个单独的缓冲区。 函数用于接收整个数据包的一个缓冲区,然后是仅接收呼叫者感兴趣的数据包部分的调用者的缓冲区。例如:
struct packet
{
int a;
int b;
char c;
int numbers[100];
};
struct randnums
{
int a;
int b;
char c;
};
DWORD GetRandomNumbers(randnums &nums)
{
packet pckt;
recv(m_socket, (char*)&pckt, sizeof(pckt), 0);
memcpy(&nums, &pckt, sizeof(nums));
}
{
randnums numbers;
GetRandomNumbers(numbers);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.