2011-10-28 41 views
0

我目前正在研究異步TCP客戶端。我能夠發送和接收消息。但是,下面的代碼讓我發瘋的時刻:

int rx = theSockId.thisSocket.EndReceive(asyn); 
char[] rcvd = new char[rx + 1]; 
System.Text.Decoder d = System.Text.Encoding.ASCII.GetDecoder(); 
int charLen = d.GetChars(theSockId.dataBuffer, 0, rx, rcvd, 0); 
System.String szData = new System.String(rcvd); 

通常情況下,一切工作正常 - 但只要消息以美元符號($)開始,我只看到這個字符。不一定是整個「消息」 - 當在插座接收的任何數據

我正在尋找一個很長一段時間,但我找不到任何解決方案....

+0

當郵件以美元符號開頭時,rx的值是多少? – Polity

+0

只是一個快速的想法,你確定文本是用ASCII編碼而不是UTF7/8/16? – Robert

+0

有趣的是,int rx的值是'1'而不是15 ... – lenniep

回答

2

Receive可以完成。您必須緩衝接收到的數據,直到收到完整的消息(如協議中定義的)。

+0

你是對的。在我的情況下,消息按換行分開。使用異步回調時,分離這些消息的最佳方式是什麼? – lenniep

+0

您需要一個緩衝區來存儲部分消息。當您在緩衝區中檢測到整條消息時,將其傳遞給進行處理。由於您正在異步執行此操作,因此您必須確保每個部分消息都按收到的順序添加。 –