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

Nic*_*ton 2 c sockets tcp

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

显然,我不能只是强制转换或转换为char,因为任何超过127的数字都会格式不正确.

我看了一下这个问题,如何将整数数组分解为一个字节数组(像素编码),但无法理解它 - 如果这是我正在寻找的东西,请有人愚蠢一点吗?

跟进问题:

当从TCP套接字读取整数数组时,为什么会出现奇怪的结果?

Eva*_*ran 16

写的原型是:

ssize_t write(int fd, const void *buf, size_t count);
Run Code Online (Sandbox Code Playgroud)

因此,当它以字节为单位写入时,它可以采用任何类型的指针.通过一个int*将是没有问题的.

编辑:

但是,我会建议您先发送计划发送的整数,以便收件人知道要阅读多少.像这样的东西(为简洁省略了错误检查):

int x[10] = { ... };
int count = 10;
write(sock, &count, sizeof(count));
write(sock, x, sizeof(x));
Run Code Online (Sandbox Code Playgroud)

注意:如果阵列来自动态内存(就像您malloc编辑的那样),则无法使用sizeof它.在这种情况下,count将等于:sizeof(int) * element_count

编辑:

正如Brian Mitchell所指出的那样,您可能也需要注意端点问题.发送任何多字节值时都是这种情况(如我推荐的计数以及数组的每个元素).这是通过:htons/ htonlntohs/ ntohl函数完成的.


Bri*_*ell 6

写可以做你想要的,但有一些事情需要注意:

1:您可能会得到一个不在int边界的部分写入,因此您必须准备好处理这种情况

2:如果代码需要是可移植的,您应该将数组转换为特定的字节序,或者在消息中编码字节序.