C/C++ 网络编程字节序的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ 网络编程字节序的问题相关的知识,希望对你有一定的参考价值。
htons和ntohs
这两函数是不是,客户跟服务机之间,主机发送出去要用htons转成网络字节顺,而服务如果接收要用ntohs,这样配对使用?
还有,在socket中,设置端口,为什么服务端跟客户端都用htons
sockaddr_in servaddr;
servaddr.sin_port = htons(5555);
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++ 网络编程字节序的问题的主要内容,如果未能解决你的问题,请参考以下文章