我有一个客户端套接字,它在连接握手完成后将图像数据推送到服务器套接字。服务器套接字处理它们而不响应任何内容
它在几分钟内运行良好。但过了一段时间,服务器套接字停止获取这些数据。我不知道为什么? TCP 中有没有这样的事情,比如如果客户端继续推送数据,服务器必须说些什么,否则对话将停止?
这段代码是我几年前写的。为了让它工作,我让服务器返回一个字符串“ACK”响应。但是,如果我将其更改为任何字符串,它将起作用。
但现在我想弄清楚为什么要重构程序。
最佳答案
与 TCP 的“单向”通信完全没问题,除非您需要来自发送方接收方的确认。但那是您的应用程序级协议(protocol)。在传输级别,数据包仍然双向流动 - TCP 在两个方向上都保留序列号并向另一端确认它们。这允许检测丢失/重复的数据包并重新传输,从而提供流的可靠性。在连接握手期间协商并在对话期间更新的窗口大小允许 TCP 减慢快速发送者的速度,从而压倒慢速接收者。
你真正需要做的是用类似 tcpdump(1)
的嗅探器记录 TCP 连接。或 wireshark并找出在“套接字停止获取这些数据”时线路上发生了什么。
关于qt - 客户端套接字发送但静默服务器套接字不接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10999157/