通过Winsocks发送一个int数组

问题描述:

我想通过Winsocks发送一个int数组。我可能是错的,但我敢肯定,只有一个char *被支持,所以我有点卡住如何正确地做到这一点。小Edian也有问题,那么这将是一个好方法吗?我已经提出了一个converting int array to char的问题,但建议在网络部分对此启动一个新线程。通过Winsocks发送一个int数组

您误解了您可以使用WinSock发送的内容。是的send()被定义为采用char *缓冲区,但实际上它只需要一个数据缓冲区。如果今天定义了send(),buf将被定义为void *。但是我相信在定义send()时void *不是C标准的一部分。

这个摘要是send()并不是什么类型的指针传递给它,它只需要指针指向的原始字节并将它们填充到数据包中。它从不看它们。因此,有没有错只是传递数组:

int sendArray(SOCKET sock, int array[], int arrayLen) { 
    // You need to send the array length so the receiver knows 
    // how long the array is 
    int bytesSent = send(sock, (char*)&arrayLen, sizeof(arrayLen)); 

    if (bytesSent != SOCKET_ERROR) { 
     // If that worked, send the 
     bytesSent = send(sock, (char*)array, sizeof(array[0]) * arrayLen); 
    } 

    return bytesSent; 
} 

然后,你必须写上发送获取数组的长度的环形,分配该大小的数组和循环的recv(),而它收集数组。

只要您的客户端和服务器都具有相同的字节序,就不需要做任何额外的处理,因为两台机器都具有相同的数据格式。由于你的问题被标记为Windows,我认为是这样。

+0

哦好吧,我确实有一个误解。我会试试这个! – seed 2010-04-23 03:32:32