我有從Java客戶端發送int到C++服務器的問題。我不想改變服務器的代碼(我聽到有關htonl的一些信息)。現在從客戶端13928(0011 0110 0110 1000)發送我的服務器6829568(0110 1000 0011 0110 0000 0000)。有沒有Java的任何功能類似於htonl?如何通過套接字發送int C++服務器/ Java客戶端
回答
更改服務器的代碼。它壞了。
問題是服務器「理解」的格式實際上根據其CPU架構而不同。 Java正在發送標準網絡字節順序,這是正確的事情 - 服務器然後必須ntohl()
將其轉換爲其內部格式。改變客戶端代碼以包含關於服務器端序的假設是一個非常糟糕的主意。
你肯定不知道。這當然是可能的,但服務器也可能會說明使用little-endian字節排序的明確定義的協議。 – 2012-04-19 08:07:09
@David Schwartz:呃,我是在假設OP對htonl的引用是相關的假設下運作的。 – 2012-04-19 08:15:23
在這些情況下,我將endian處理卸載到客戶端。服務器以其本地端序進行操作/通信。客戶端執行endian處理,只有當它與服務器不同時... – Malkocoglu 2012-04-19 10:20:39
只是做數學。使用位移,邏輯AND和邏輯OR。例如,提取四個八位字節,你可以使用:
x & 0xff
(x >> 8) & 0xff
(x >> 16) & 0xff
(x >> 24) % 0xff
相反>> 8
,你可以使用/ 256
。您可以使用% 256
而不是& 0xff
。把操作放在一起。
查看XDR,這個定義了客戶端和服務器之間通信時應該使用的標準。如果可能的話,將cleint的int複製到一個字符串中,然後將該字符串發送給服務器,並將字符串轉換爲整數。這是發送int最有效的方式。
- 1. Java客戶端/服務器通過套接字發送對象問題
- 2. Arduino客戶端通過套接字向Java服務器發送數據
- 3. C套接字服務器,Java套接字客戶端:阻塞!
- 4. Java套接字 - 從客戶端發送文件到服務器
- 5. 套接字,java發送文件服務器客戶端
- 6. Java套接字客戶端/服務器
- 7. 使用TCP通過套接字從服務器端發送ArrayList到客戶端
- 8. 如何通過套接字將數據從c#客戶端發送到java服務器?
- 9. 通過TCP與c + +(套接字服務器)conect android(套接字客戶端)
- 10. C++套接字,客戶端無法發送消息到java服務器
- 11. 通過套接字發送多個變量從客戶端到服務器
- 12. Python套接字客戶端到Java套接字服務器
- 13. 通過套接字客戶端服務器通信
- 14. 套接字服務器 - 發送消息從客戶端到客戶端
- 15. 客戶端發送文件到服務器的新套接字
- 16. 如何在Java服務器客戶端通過套接字傳遞對象
- 17. 通過服務器發送BufferedImage到另一個Java客戶端
- 18. Java服務器 - 客戶端套接字通信
- 19. 如何通過java套接字將多個圖像從客戶端發送到服務器?
- 20. PHP套接字服務器/客戶端
- 21. Python服務器客戶端套接字
- 22. 客戶端服務器udp套接字
- 23. 套接字客戶端發送消息
- 24. PHP - C#TCP客戶端/服務器如何發送字符串?
- 25. Java套接字 - 服務器在客戶端發送響應後掛起
- 26. (Java服務器套接字)每分鐘向客戶端發送消息
- 27. 如何通過使用C#的套接字將cookie發送到客戶端?
- 28. C#客戶端。從C#客戶端發送數據到Java服務器
- 29. 客戶端/服務器套接字:如何使服務器推送消息到客戶端?
- 30. Java客戶端/服務器套接字端口分配
如何將13928轉換爲客戶端上的字節,以及如何將字節轉換爲服務器上的6829568? – 2012-04-19 07:23:03