当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在C中通过TCP发送整数数组?》经验,为你挑选了2个好方法。

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

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

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

跟进问题:

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



1> Evan Teran..:

写的原型是:

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它.在这种情况下,count将等于:sizeof(int) * element_count

编辑:

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



2> Brian Mitche..:

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

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

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

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有