代码之家  ›  专栏  ›  技术社区  ›  Tree77

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

  •  5
  • Tree77  · 技术社区  · 16 年前

    它在启动时启动telnet守护进程,在特定端口上监视,并在收到连接时启动程序。

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

    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 这两者都返回成功,但似乎没有帮助的情况。

    **乌德帕特:从服务器端截获了一条线鲨。很明显心跳是连续不断的。没有打嗝,没有耽搁。但是在客户身上发现了一些有趣的东西。这个测试用例中的客户端(ubuntu9.04上的telnet)似乎突然停止接收心跳(如上所述)。Wireshark证实了这一点,数据包中出现了大停顿。好吧,一旦客户端停止接收心跳信号,按下(客户端上的)任何按键似乎都会触发来自客户端缓冲区(所有心跳信号)的数据喷出。客户端上的Wireshark也在一个数据包中显示了如此大量的数据。

    不幸的是,我真的不知道这意味着什么。这是线路模式开/关吗?行尾(\r\n)非常清晰。

    **更新2:运行netcat而不是telnetd,问题是不可再现的。

    1 回复  |  直到 16 年前
        1
  •  1
  •   jbarlow    16 年前

    我要做的第一件事就是走出Wireshark,试着找出服务器是否真的在发送消息。在服务器和第三方PC上运行Wireshark会很有帮助。上一次心跳有什么不同吗?


    编辑。 对你的客户来说这是个有趣的发现。

    好像有什么东西挡在路上了。你可以使用 网络猫

    在您的客户机和服务器之间与第三方的通信量可能仍然值得检查。内核可能正在优化对网络的写操作,并在内部缓冲数据。这是唯一能确保所看到的是电线上真正发生的事情的方法。