如何在C中通过udp socket发送整数数组?

我必须通过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或者您需要的任何内容。
  • 检查代码中的字节顺序。

Endianess转换:

 // 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 array[42]; write(sock, array, sizeof(array));