通过Winsocks发送一个int数组

时间:2010-04-22 02:56:40

标签: c++ windows networking

我正在尝试通过Winsocks发送一个int数组。我可能错了,但我很确定只支持char *,所以我有点坚持如何正确地做到这一点。小/大edian也存在问题,那么这样做的好方法是什么?我已经问了converting int array to char的问题,但建议在网络部分开始一个新的线程。

1 个答案:

答案 0 :(得分:2)

您误解了使用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;
}

然后你必须在send上编写一个循环来获取数组的长度,在收集数组时分配一个大小的数组并在recv()上循环。

只要您的客户端和服务器都具有相同的endianess,您就不需要进行任何额外的处理,因为两台计算机具有相同的数据格式。由于您的问题是标记Windows,我认为是这种情况。