如何通过套接字C ++服务器/ Java客户端发送int

时间:2012-04-19 07:12:52

标签: java c++ sockets

我遇到了从Java Client向C ++服务器发送int的问题。我不想改变服务器代码(我听到有关htonl的内容)。现在从客户端13928(0011 0110 0110 1000)发送我在我的服务器6829568(0110 1000 0011 0110 0000 0000)上。 un Java是否有类似于htonl的函数?

3 个答案:

答案 0 :(得分:2)

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

问题是服务器“理解”的格式实际上会变化,具体取决于其CPU架构。 Java正在发送标准网络字节顺序,这是正确的事情 - 然后服务器必须ntohl()将其转换为其内部格式。更改客户端代码以包含有关服务器字节序的假设是一个非常非常糟糕的主意。

答案 1 :(得分:1)

做数学。使用位移,逻辑AND和逻辑OR。例如,要提取四个八位字节,您可以使用:

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

您可以使用>> 8代替/ 256。您可以使用& 0xff代替% 256。只需将操作放在一起。

答案 2 :(得分:0)

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