在套接字上以正确的填充和字节序发送结构
||
我定义了几种结构,可以通过不同的操作系统(TCP网络)进行发送。
定义的结构为:
struct Struct1 { uint32_t num; char str[10]; char str2[10];}
struct Struct2 { uint16_t num; char str[10];}
typedef Struct1 a;
typedef Struct2 b;
数据存储在文本文件中。
数据格式如下:
123
馅饼
脆皮
Struct1 a存储为3个单独的参数。但是,struct2是两个单独的参数,第二行和第三行都存储到char str []中。问题是,当我通过多个网络写入服务器时,无法正确接收数据。有许多空格将结构中的不同参数分开。写入服务器时如何确保正确的发送和填充?如何正确存储数据(动态缓冲区或固定缓冲区)?
写的例子:write(fd,&a,sizeof(typedef struct a));它是否正确?
struct2的问题接收端输出:
123(,)
0(,派)
0(外壳)
正确的输出
123(饼皮)
没有找到相关结果
已邀请:
4 个回复
梆晨灸碾
不正确;至少不能移植,因为C编译器可能会在元素之间引入填充以确保正确对齐。
甚至没有意义。 您应该如何发送数据取决于协议的规范。特别是,协议定义了各种各样的发送字符串的方式。通常,单独发送
成员最安全;通过多次通话或or4ѭ。例如,发送
通过网络,其中
和correct7ѭ已经具有正确的字节序,您将执行以下操作:
磋判粗惊
(3)不容易解决。在网络协议上使用以null结尾的字符串 并根据它们的存在使您的代码容易受到多种攻击。如果需要使用字符串,我将使用适当的编码方法,例如上面建议的方法。
孤捷侩
究补闯