是否存在任何统一函数而不是 htons htonl

Does any uniform function exists instead of htons htonl

我正在尝试新的 C++ 套接字编程。我在理解 htons、htonl 和相关函数的功能时遇到了一些困难。我阅读了一些文件,但我的问题如下,

对于单个服务器和单个客户端,我在两端都使用 htons 作为端口号,代码工作正常。即使我不使用这些功能并且我的服务器客户端都是基于 Intel 的 64 位机器,代码也能正常工作。但是如果多个客户端尝试连接我的服务器并且客户端使用不同的数据存储格式怎么办?例如,x86 是小端,ARM A-53 是小端和大端等等,其中一些是 32 位、16 位或 64 位等。我的服务器是 64 位。所以我现在很困惑我必须使用哪些功能统一服务于所有目的?或者,我必须始终检测客户端类型并将其数据格式(端口号)转换为 64 位(因为我的服务器是 64 位),然后使用 htonl() 函数访问服务器。如果我走错了路,有人请回复或指出我会很棒......

你问这个问题很好。这表明您在担心正确的事情。

此处的文档:

http://linux.die.net/man/3/htonl

请注意,无论您使用哪个系统,参数和 return 类型都有特定的大小。

这些函数在网络字节顺序(实际上是大端字节序)之间相互转换。无论您正在编程的体系结构如何,他们都会执行该任务(如果您使用的是大端体系结构,它将只是一个空操作)。

因此使用这些将使代码可移植。请注意,您不应在两次转换中都使用 htonl。当您将数据发送到另一台主机时,您在发送数据之前使用 htonl(主机到网络字节顺序),然​​后在接收时使用 ntohl(网络到主机字节顺序)。

请注意,不能保证 ntohlhtonl(虽然我不能举个例子)相同,因此您应该使用正确的。