我们已经完成了一些基本的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