0

我在将 int 从 Java 客户端发送到 C++ 服务器时遇到问题。我不想改变服务器的代码(我听说过一些关于 htonl 的事情)。现在从客户端 13928 (0011 0110 0110 1000) 发送,我在我的服务器上收到 6829568(0110 1000 0011 0110 0000 0000)。是否有 un Java 任何类似于 htonl 的功能?

4

3 回答 3

2

更改服务器的代码。它坏了。

问题是服务器“理解”的格式实际上根据其 CPU 架构而有所不同。Java 正在发送标准的网络字节顺序,这是正确的做法——然后服务器必须ntohl()将其转换为其内部格式。更改客户端代码以包含有关服务器字节序的假设是一个非常非常糟糕的主意。

于 2012-04-19T07:21:18.593 回答
1

只是做数学。使用位移、逻辑与和逻辑或。例如,要提取四个八位字节,您可以使用:

x & 0xff
(x >> 8) & 0xff
(x >> 16 ) & 0xff
(x >> 24 ) % 0xff

而不是>> 8你可以使用/ 256. 而不是& 0xff,您可以使用% 256. 只需将操作放在一起即可。

于 2012-04-19T07:14:45.150 回答
0

查看 XDR ,这定义了客户端和服务器之间通信时应该使用的标准。如果可能的话,将 cleint 的 int 复制到一个字符串中,然后将该字符串发送到服务器,然后在那里将字符串转换为整数。这是发送 int 的最有效方式。

于 2012-04-19T18:19:17.630 回答