c - 如何在 C 中通过 TCP 发送整数数组?

标签 c sockets tcp

我相信 write() 只能发送字节数据缓冲区(即 signed char),那么如何使用 C write 发送长整数数组() sys/socket.h 库中的函数?

显然,我不能只将 long 转换或转换为 char,因为任何超过 127 的数字都会出现格式错误。

我看了一下问题,how to decompose integer array to a byte array (pixel codings) ,但无法理解 - 如果这就是我要找的东西,请有人能把它简化一点吗?

跟进问题:

Why do I get weird results when reading an array of integers from a TCP socket?

最佳答案

write 的原型(prototype)是:

ssize_t write(int fd, const void *buf, size_t count);

所以当它以字节为单位写入时,它可以接受任何类型的指针。传递 int* 完全没有问题。

编辑:

不过,我建议您也发送您计划首先发送的整数数量,以便接收者知道要读取多少。像这样的东西(为简洁起见省略了错误检查):

int x[10] = { ... };
int count = 10;
write(sock, &count, sizeof(count));
write(sock, x, sizeof(x));

注意:如果数组来自动态内存(就像您 malloc 编辑它一样),您不能对其使用 sizeof。在这种情况下,计数将等于:sizeof(int) * element_count

编辑:

作为Brian Mitchell注意,您可能需要注意 endian问题也是如此。发送任何多字节值时就是这种情况(如我推荐的计数以及数组的每个元素)。这是通过以下函数完成的:htons/htonlntohs/ntohl 函数。

关于c - 如何在 C 中通过 TCP 发送整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672241/

相关文章:

c++ - gnu缩进的谷歌c风格设置?

sockets - 使用 select 进行非阻塞读取

javascript - Meteor:检查有多少客户订阅了某个发布功能

使用套接字 C 编译函数警告

c# - 用于网络通信的良好 EOF 字节

c# - WCF net.tcp SSL : none of the cipher suites supported by the client application are supported by the server

c - 使用 strtok 函数删除制表符空间

嵌套在 union 内的结构中的通用初始序列 - C 标准中的定义

c - 通过 UDP 发送大文件

c - 从 C 中的 unsigned int 设置 IP 地址信息