2012-03-01 44 views
0

我正在構建客戶端/服務器媒體應用程序供個人使用。該應用程序可以工作,但每個連接有兩個套接字:一個用於服務器/客戶端命令和通信(只是來回發送JSON字符串;另一個用於發送序列化介質。時尚,我知道哪些數據是什麼,或者是它更好地只是離開他們,因爲他們是如何實現多用途套接字協議?

回答

2

您需要定義結構以您的郵件使用一個套接字同時例如:?

Message format: 
    Command,DataLen,Data 

Example messages: 
    JSON,20,{ "text": "Hello!" } 

    CMD1:9:Some Data 

這是使用逗號將數據長度與命令分開的「基於文本」格式,您可以使用一個二進制格式(這可能更容易解析和更強大),例如:

CommandLen(4-bytes):Command:DataLen(4-bytes):Data 
+0

@EvanTeran,brettw這是如何支持原始二進制流?據我所知,沒有辦法將原始二進制文件放入JSON字符串中。很明顯,我可以發送一條JSON消息,說'嗨,客戶希望xxx二進制數據',但是這不能解決消息/二進制數據同步問題。 – AedonEtLIRA 2012-03-01 17:57:06

+1

如果我通過JSON編碼發送二進制數據,我可能會使用base64編碼。它很簡單,並且數據大小膨脹相對較小。 – 2012-03-01 18:11:45

+0

@EvanTeran感謝您的建議。我做了一個簡單的Arrays.toString(byte []),然後再返回基準,並將其與Base64進行比較。你贏了。再次感謝,我不知道Bas64的史詩味道。 – AedonEtLIRA 2012-03-01 18:54:53