gpt4 book ai didi

c++ - 通过 Winsocks 发送一个 int 数组

转载 作者:可可西里 更新时间:2023-11-01 11:40:10 25 4
gpt4 key购买 nike

我正在尝试通过 Winsocks 发送一个 int 数组。我可能是错的,但我很确定只支持 char*,所以我对如何正确执行此操作有点困惑。 little/big edian 也有问题,那么这样做的好方法是什么?我已经问过 converting int array to char 的问题了但建议改为在网络部分就此启动一个新线程。

最佳答案

您误解了可以使用 WinSock 发送的内容。是send()被定义为采用 char* 缓冲区,但实际上它只采用数据缓冲区。如果今天定义了 send(),buf 将被定义为 void*。但我相信在定义 sent() 时 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() 收集数组时循环。

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

关于c++ - 通过 Winsocks 发送一个 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2687961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com