当我通过套接字将一个整数变量从一个进程发送到另一个进程时,然后在接收端打印该值,该值仍然是一样的,而不使用ntohl / htonl,那么除了初始化套接字结构之外,还需要使用这些函数.我理解litte / big endian.但是为什么当值保持不变时,我们需要将端口和IP nos转换为主机/网络字节顺序.请详细说明整数是如何通过网络传递的?
解决方法
如果您希望程序可移植,那么任何时候通过网络发送一个大小超过1个字节的整数,您必须首先使用htons或htonl将其转换为网络字节顺序,并且接收计算机必须将其转换为主机字节使用ntohs或ntohl命令.
在您的情况下,值仍然相同的原因可能是因为发送计算机和接收计算机的字节码相同.换句话说,您正在使用的发送计算机和接收计算机都是小端(或大端,无论情况如何).
但是,如果您希望您的程序可以移植,您就不能依赖于此.有一天,例如,发送计算机可能是Intel x86,并且接收可能是Sun SPARC,然后如果不使用htons,则程序将失败.