2013-06-12 91 views
0

我想了解平臺無關套接字通信如何工作,因爲我想在Java服務器和一些本機Unix和Windows客戶端之間共享套接字數據。套接字是獨立於平臺的設計,但數據表示與機器相關,因此如果TCP數據抽象爲真實的數據格式是有利的,因爲在一個系統上支持的數據格式不一定必須支持另一個系統。平臺獨立套接字通信協議

例如,如果我想從C++客戶端程序向Java服務器發送一個unsigned int值,我必須告訴服務器這個數字應該被解釋爲一個負整數。這種抽象是如何工作的?由於我的知識水平有限,我只會發送一個數字作爲文本,然後附加一些獨特的字符序列,告訴接收方他收到了什麼樣的數據,但我不知道這是否是一種可行的方法。

更具體一點:我想發送包含下列內容的信息:

  1. 在消息某種短的信號或命令 的開始,以便接收器精確地知道什麼處理隨後的數據。
  2. 然後是一些任意長度的文本內容。
  3. 後面跟着一個數字,也可以是文字,但應分別解釋爲 。
  4. 最後可能會有一個標記,告訴服務器此處的消息結束 。

TCP以字節塊處理數據。這是否意味着當我在一個字節中編寫一個UTF-8編碼字符時,如果客戶端機器考慮到Java的大端字節順序,這個字符將在不同的機器上以相同的方式被解釋?感謝您的任何意見和幫助。

+2

JSON,protobuf。 – ctn

+0

「套接字是獨立於平臺的設計,但數據表示與機器相關」< - 只有當您選擇時!只需選擇一個沒有這個問題的數據格式 - 正如@ctn所說,你可以選擇JSON或protobuf。問題解決了。 – fge

+0

Protobuf是我在閱讀本文時想到的。 – dwxw

回答

0

套接字是獨立的,但不是在傳輸的數據(類型長度,字節順序,字符串編碼,...)

ThriftProtobuf或者如果你想跨語言發送二進制數據Avro和跨平臺功能

+0

我知道這些問題,但我不想使用庫,因爲我想了解它是如何工作的。出於測試目的,我只想發送一些簡單的數據。 – user1812379