telnet客户端连接服务器无响应,telnet客户端连接停止接收数据,服务器仍在发送...

我在嵌入式Linux环境中工作 .

它在启动时启动一个telnet守护程序,它监视特定端口并在收到连接时启动程序 .

telnetd -l /usr/local/bin/PROGA -p 1234

PROGA - 将以不规则的间隔输出一些数据 . 当它没有输出数据时,每隔X段发出一个“心跳”类型的字符串,让客户知道我们仍处于活动状态,即“heartbeat \ r \ n”

经过一段随机的时间后,客户端(使用linux版本的telnet,由 telnet xxx.xxx.xxx.xxx 1234) 启动将无法收到'heartbeat\r\n'

客户看到的数据:

heartbeat

heartbeat

heartbeat

...

heartbeat

[nothing, should have received heartbeat]

[nothing forever]

心跳发送:

result = printf("%s", heartbeat);

检查结果,总是 heartbeat 的长度 . 记录到syslog会向我们显示 printf() 正在以适当的间隔成功执行

我已经添加了tcdrain和fflush,它们都取得了成功,但似乎并没有帮助这种情况 .

任何帮助,将不胜感激 .

** UDPATE:从服务器端获取了wireshark捕获 . 很明显,心跳正在不断发送 . 没有Hicups,没有延迟 . 但是在客户端发现了一些有趣的东西这个测试用例中的客户端(Ubuntu 9.04上的telnet)似乎突然停止接收心跳(如上所述) . Wireshark证实了这一点,数据包大幅停顿 . 好吧,一旦客户端停止接收心跳,按下任何击键(在客户端上)似乎会触发来自客户端缓冲区(所有心跳)的数据 . 客户端上的Wireshark还在一个数据包中显示大量数据 .

不幸的是,我真的不知道这意味着什么 . 这是一个线路模式开/关的东西?线路结尾(\ r \ n)非常明显地通过 .

**更新2:运行netcat而不是telnetd,问题不可重现 .

本文链接:https://my.lmcjl.com/post/19530.html

展开阅读全文

4 评论

留下您的评论.