我有一個代碼(讓我們假設一個簡單的聊天應用程序),我使用帶有同步的Tcp。但由於Async方式雖然設置起來更加困難,但我決定改變從同步到異步的方式。但現在我正在面臨一些使用異步的問題。使用帶有異步的Tcp接收消息的問題
- 緩衝區大小:我知道我們需要考慮有限的字節大小以獲取來自對端的字節。我讀了很多文章,但我的問題沒有解決,我有一個非常簡單但毫無價值的方法來應對這種情況,在每封郵件的末尾添加一個字符;那麼接收者可以理解消息何時被完全接收。但我還有另一個問題阻止我進一步解決其他問題。
讓我用下面的代碼解釋我的問題:
public void Send(byte[] message, Socket connection)
{
connection.BeginSend(message,
0,
message.Length,
SocketFlags.None,
new AsyncCallback(OnSend),
connection);
}
和OnSend方法,我只是用connection.EndSend(結果)其中結果的IAsyncResult。但是當我然後像下面的代碼那樣調用Send方法兩次時,OnReceive回調將接收它們作爲單個消息。
Send(Encoding.Unicode.GetBytes("Hello"));
Send(Encoding.Unicode.GetBytes("Bye"));
我OnReceiveMethod將使用Console.WriteLine(消息);其中消息是從對等端接收到的字符串。並使用同步方式的輸出必須是
你好
再見
但在異步方式我接收它作爲一個消息不是兩個,因此被印刷
HelloBye
此致敬禮 Peyman Mortazavi
對,現在我在發送方法等待10毫秒,這是一個很短的時間,但將解決問題。並以自定義的格式,我可以理解消息何時開始和結束。 – Peyman