c - 如何在C中通过udp套接字发送整数数组?

标签 c arrays sockets int

我必须通过 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/

相关文章:

sockets - 带有 UDP 数据报的 SO_REUSEADDR - 资源不可用

c - 为什么我的代码会出现段错误?

c++ - 在 Debian 上为您自己的应用程序添加 SNMP 支持的最佳方式

c++ - 将文本文件中的整数矩阵存储到 C++ 中的数组中

javascript - JS 函数创建并插入数组 - 只有第一个元素是 NaN

javascript - node.js socket.io 脚本在 1-2 天后被 SIGSEGV 杀死

c - #include 其他 C 程序

c - 用C语言构建一个漂亮的GUI

javascript - 优雅的reduce函数

c++ - 绑定(bind) : Socket operation on non-socket