繁体   English   中英

为revv部分分配缓冲区

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM