簡體   English   中英

如何通過套接字C ++服務器/ Java客戶端發送int

[英]How to send int via socket C++ server /Java client

我將int從Java Client發送到C ++服務器時遇到問題。 我不想更改服務器代碼(我聽到有關htonl的信息)。 現在從客戶端13928(0011 0110 0110 1000)發送,我在服務器6829568(0110 1000 0011 0110 0000 0000)上接收。 Java是否有任何類似於htonl的功能?

更改服務器的代碼。 壞了

問題是服務器“理解”的格式實際上將根據其CPU架構而有所不同。 Java正在發送標准的網絡字節順序,這是正確的做法-服務器隨后必須通過ntohl()將其轉換為內部格式。 更改客戶端代碼以包含有關服務器字節序的假設是一個非常非常糟糕的主意。

只是做數學。 使用位移,邏輯與和邏輯或。 例如,要提取四個八位位組,可以使用:

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

可以使用/ 256代替>> 8 可以使用% 256代替& 0xff 只需將操作組合在一起即可。

查找XDR,這定義了客戶端與服務器之間進行通信時應使用的標准。 如果可能,請以字符串形式復制cleint的int並將該字符串發送到服務器,然后在該服務器上將字符串轉換為整數。 這是發送int的最有效方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM