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