我们已经完成了一些基本的 TCP 通信,但还有一些问题。我们正在与 TCP 服务器通信,其中事务流描述如下:
发送方通过发送 STX (ASCII 0x02) 字符来启动交易,然后通过发送 ACK (ASCII 0x06) 字符等待接收方回复。收到 ACK 后,发送方发送一个 4 字节无符号大端整数,表示消息有效负载的大小,然后是有效负载,最后是有效负载的 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、准备负载等?
如果传输控制是自动处理的,我们是否需要设置任何特定的套接字标志?
仅供参考:我们发现几个链接(如下所示)已被证明对消息帧有用,但没有一个讨论 STX/ACK 传输控制: