2012-06-12 51 views
1

我有一个客户端套接字在连接握手完成后将图像数据推送到服务器套接字。和服务器套接字处理它们没有任何反应客户端套接字发送,但静默服务器套接字不接收

它运作良好几分钟。但有一段时间后,服务器套接字停止获取这些数据。我无法弄清楚为什么? TCP中是否有这样的事情,如果客户端不断推送数据,服务器必须说些什么,否则对话将停止?

我在几年前写了这个代码。并使其工作我让服务器返回一个字符串“ACK”的答复。但是,如果我将其更改为任何字符串,它将起作用。

但现在我想弄清楚为什么要重建程序。

回答

0

除非您需要发送端接收方的确认,否则与TCP的“单向”通信是完全正常的。但这是您的应用程序级协议。在传输级别,数据包仍然以双向流动的方式传输 - TCP在两个方向上保留序列号,并向另一侧确认它们。这允许检测丢弃/重复的分组并重传,从而提供流的可靠性。在连接握手过程中协商的窗口大小以及会话生命周期中更新的窗口大小允许TCP减慢快速发送方,从而压倒慢速接收方。

你真正需要做的就是用嗅探器(如tcpdump(1)wireshark)记录TCP连接,并找出当“socket停止获取这些数据”时在线上发生了什么。

+0

我用wireshak嗅探了交通。我看到的是客户不断发送。但服务器在几分钟后没有收到任何这些数据包。 –

+0

你确定服务器实际上是从套接字读取的吗?服务器机器是否发送TCP ACK? –

+0

是的,否则它在最初的几分钟内如何工作。我观察到的是,客户端先推送数据包,然后服务器处理数据包,并在几分钟内快速运行。在此之后,它看起来像一个交通堵塞交通堵塞但它应该很好地处理底层的TCP。但令人惊讶的是,它不是。 –

相关问题