当我使用套接字传输结构时,我应该考虑字节顺序

时间:2015-11-15 09:10:38

标签: c sockets byte

 //Select the elements to animate and enjoy!
 var elt = document.querySelector("#notification") ;
 iJS.animate(elt, "shake") ;
 //it return an AnimationPlayer object
 //animation iteration and duration can also be indicated.
 var vivifyElt = iJS.animate(elt, "bounce", 3, 500) ;
 vivifyElt.onfinish = function(e) {
     //doSomething ...;
 }
 // less than 1500ms later...changed mind!
 vivifyElt.cancel();

如果我使用struct A { int a; int b; }; char data[10]; struct A a; 函数将memcpy()转换为char数组a,并使用socket传输它。我现在考虑字节顺序吗?

2 个答案:

答案 0 :(得分:2)

如果它是一个真实的项目(将在现实世界中部署的东西)那么是的,你绝对需要关心字节排序。您还需要关注其他序列化问题,包括数据类型大小和结构字段对齐。

您可以使用显式尺寸类型消除一些令人头疼的问题,例如使用int32_t而不是int

结构字段对齐问题涉及更多。简短的回答:不要send()来自一台机器的原始结构,recv()来自另一台机器。这样做假设在两个系统上运行的应用程序以完全相同的方式布置其结构字段(使用相同的填充)。

答案 1 :(得分:0)

您可能应该在接收数据时期望网络字节顺序。你遇到的另一个问题是填充。允许编译器在struct成员之间放置空格,导致所需的对齐。您必须在此时只发送一个network-byteordered结构成员来解决此问题。你可以查找序列化函数。