我必须通过 udp 套接字发送一个 int 数组。我是否必须将其转换为字符数组或字节序列?标准溶液是什么?
最佳答案
你可以这样做:
int array[100];
sendto(sockfd, array, sizeof(array), 0, &addr, addrlen);
要在另一侧接收数组(假设您始终发送相同大小的数组):
int array[100];
recvfrom(sockfd, array, sizeof(array), 0, &addr, &addrlen);
正如评论中所说,您必须小心发送/接收数据包的系统架构。如果您正在为“标准”计算机开发应用程序,那么您应该不会有任何问题,如果您想确定:
- 使用固定大小的类型(包括
stdint.h
并使用int32_t
或任何您需要的类型。 - 检查代码中的字节序。
字节序转换:
// SENDER
int32_t array[100] = ...;
int32_t arrayToSend[100];
for (int i = 0; i < 100; ++i) {
arrayToSend[i] = htonl(array[i]);
}
sendto(sockfd, arrayToSend, sizeof(arrayToSend), 0, &addr, addrlen);
// RECEIVER
int32_t array[100];
int32_t arrayReceived[100];
recvfrom(sockfd, arrayReceived, sizeof(arrayReceived), 0, &addr, &addrlen);
for (int i = 0; i < 100; ++i) {
array[i] = ntohl(arrayReceived[i]);
}
关于c - 如何在C中通过udp套接字发送整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23893306/