【发布时间】:2025-12-29 09:05:06
【问题描述】:
我必须通过 udp 套接字发送一个 int 数组。我是否必须将其转换为 char 数组或字节序列?标准溶液是什么?
【问题讨论】:
-
通过 UDP socker 发送东西从来都不是问题。另一方面,接收...
我必须通过 udp 套接字发送一个 int 数组。我是否必须将其转换为 char 数组或字节序列?标准溶液是什么?
【问题讨论】:
你可以这样做:
int array[100] ;
sendto(sockfd, array, sizeof(array), 0, &addr, addrlen);
在另一端接收你的数组(假设你总是发送相同大小的数组):
int array[100] ;
recvfrom(sockfd, array, sizeof(array), 0, &addr, &addrlen);
正如 cmets 中所说,您必须小心发送/接收数据包的系统架构。如果您正在为“标准”计算机开发应用程序,那么您应该没有任何问题,如果您想确定的话:
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]) ;
}
【讨论】:
int 边界。然后是下一部分。然后下一部分......每个数据包 512 字节的有效负载大小被认为可以在 Internet 上可靠地工作。如果您在内部网络上,则可以使用更大的尺寸,例如 8192。
您不必转换它。
例如,你可以这样做:
int array[42];
write(sock, array, sizeof(array));
【讨论】: