C/C++ 网络编程字节序的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ 网络编程字节序的问题相关的知识,希望对你有一定的参考价值。

htons和ntohs

这两函数是不是,客户跟服务机之间,主机发送出去要用htons转成网络字节顺,而服务如果接收要用ntohs,这样配对使用?

还有,在socket中,设置端口,为什么服务端跟客户端都用htons
sockaddr_in servaddr;

servaddr.sin_port = htons(5555);

参考技术A 恩。基本上是这个意思。
htons表示short类型的数据由主机字节序转为网络字节序。而ntohs表示是网络字节序转换到主机字节序。
因为历史的原因网络字节序约定为大端(bigedian),而主机字节序位则依据CPU的类型各有不同,我们普通的intel处理器为小端,而powerpc等一些处理器则是大端。那么从主机出去的数据到网络上例如是INTEL,那是要转换的。所以你这个无论是服务器还是客户端,只要是出去的数据都是要经过htonxx这样的函数转换。如果是接收呢,则是要通过ntohxx这样的函数转换的。
设置端口由于是面向网络操作,所以也是要使用htons转换的。本回答被提问者采纳
参考技术B uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlog);
uint16_t ntohs(uint16_t netshort);

这种时候man一下就好了。

以上是关于C/C++ 网络编程字节序的问题的主要内容,如果未能解决你的问题,请参考以下文章

网络字节序的转换函数

在 C 中通过具有正确填充和字节序的套接字发送结构

字节序的理解----C语言和Python语言

c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换

第五篇:主机字节序与网络字节序的转换

主机字节序和网络字节序