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

时间:2014-05-27 15:24:58

标签: c arrays sockets int

我必须通过udp套接字发送一个int数组。我必须将其转换为字符数组或字节序列吗?什么是标准解决方案?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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]) ;
}

答案 1 :(得分:0)

你不必转换它。

例如,你可以这样做:

int array[42];

write(sock, array, sizeof(array));