我們已經完成了一些基本的TCP通信,但有幾個問題。我們正在與其中的交易流程被描述爲TCP服務器通信如下:通過.Net發送/接收爲串行通信構造的消息套接字
發送方通過發送STX(ASCII 0×02) 字符發起交易 ,然後等待 接收者通過發送回覆ACK (ASCII 0x06)字符。接收到ACK 後,發送者發送 四字節無符號,大端 整數表示 消息有效負載的大小,其次是 有效載荷,最後16個字節的MD5 消息摘要有效載荷。如果 收件人對 消息滿意,它會發送一個ACK字符。
<STX> = ASCII 0x02
<ACK> = ASCII 0x06
Sender: <STX> <0x00><0x00><0x00><0x05><'H'><'E'><'L'><'L'><'O'><0xEB><0x61>...
Recipient: <ACK> <ACK>
使用.NET套接字(System.Net.Sockets.Socket),什麼是管理STX/ACK傳輸控制的正確方法?套接字是否自動處理(即我們是否簡單地調用socket.Send(byteData)),還是我們需要明確發送STX,等待ACK等?
接收也是一樣:我們是簡單地接收傳入的數據,還是需要監聽STX字符,發送ACK,準備好有效載荷等?
如果傳輸控制是自動處理的,是否有我們需要設置的特定套接字標誌?
FYI:我們發現,已經證明了消息框有用的幾個環節(如以下),但沒有討論STX/ACK傳輸控制:
- http://blogs.msdn.com/b/joncole/archive/2006/03/20/simple-message-framing-sample-for-tcp-socket.aspx
我們實現了這個方法,發送STX,等到我們收到ACK,發送長度+ payload + MD5,等到我們收到另一個ACK,然後完成「send」。問題在於它處於同步過程中。它需要很長時間才能完成,但可能需要在等待ACK時收到類似的數據。異步執行此操作的最佳方法是什麼? – 2011-01-11 20:47:22