2011-05-29 193 views
1

我在Android上實現了一個通過套接字連接字符串發送到服務器(C#)的小型應用程序。爲Android客戶端(Android)和C#服務器實現協議

現在,我只編碼我發送的字符串(安全問題),但現在我需要實現一個協議,以在我的應用程序上具有其他功能,如「保持活動」消息等等。

我們已經定義了網絡協議,它有一個頭部(字節序列)和數據(我之前發送的字符串),但是因爲我不熟悉這個,我不知道如何開始在Java(客戶端)上實現該協議。

你能指出一些簡單協議實現的例子嗎?我需要讀取字節,所以我可以決定客戶端從服務器請求的操作類型,以及其他方式。

我的第一個嘗試是爲每個消息類型創建一個類,並按我需要的方式填充字節,最後每個消息都是一個字節數組。但在我確信這是正確的道路之前,我不想開始深入研究。

謝謝你的時間。

編輯

端使用Protocol Buffers實現這一點:

http://code.google.com/p/protobuf-net/ - 爲C#服務器端

http://code.google.com/p/protobuf-javame/ - 爲Android側

回答

1

我面臨同樣的問題,一些過去。如果你有足夠的帶寬,那麼我建議你去XML和XML流,這兩種技術適用於所有平臺和所有語言。但是,如果你缺少帶寬,那麼你可以去二進制。 這裏是設計我通常使用:

class AbstractMessage{ 
byte[] data; 
void GenerateHeader(){ 
     // this method generates the message header 
} 
// Use this method to translate your 
// business domain message into a byte array that will go through the network 
void abstract byte[] ToByteArray(AbstractMessage); 
// Translate received data from network to a business domain message 
void abstract AbstractMessage ParseMessage(byte[] receivedData) 
} 

// And then you can have your messages 
class MyMessage extends AbstractMessage{ 
// In this subclass, you can define how a 
// MyMessage object is translated into a byte array 
// and vice versa (using ToByteArray and ParseMessage methods) 
} 

我希望這有助於

問候,