【问题标题】:Ping Telnet ServerPing Telnet 服务器
【发布时间】:2013-11-10 08:22:14
【问题描述】:

我编写了自己的 telnet 客户端。我有一个问题,无法解决。 我连接到设备并成功与其通信,但在某些时候设备断开连接。

在这种情况下,当我使用 Zoc 终端时,它会写“[TELNET] INFO: DISCONNECTED”。

当我使用自己的终端时,我无法识别这种情况。 TcpClient 中的“已连接”属性为 True。当我在断开连接后尝试将某些内容写入流时,我会收到异常。但这为时已晚。

如何识别连接丢失?

谢谢。

【问题讨论】:

  • 请出示相关源码...
  • var tcpSocket = new TcpClient(Host, Port); tcpSocket.Connect(主机,端口); var stream = tcpSocket.GetStream();
  • 对不起,但这不是相关部分:-(
  • 我在while循环中读/写数据。
  • 如果您的意思是当客户端故意启动断开连接时,您应该修改您的协议以发送断开连接消息。如果您的意思是当客户端意外断开连接时(例如断电或 IP 地址更改),那么客户端将无法再进行通信。连接必须通过超时/连接重置在服务器端失败。

标签: c# .net telnet


【解决方案1】:

尝试使用Socket 而不是TcpClient。一些 telnet 守护程序需要每次按键来刷新缓冲区,因此请尝试在相关流上调用 Stream.Flush。我建议将NetworkSteam 绑定到您的Socket 并将其包装在TextWriter 中,并在每次按键时调用Flush

使用Socket,您可以通过看到Socket.ReceiveAsync 完成并返回零字节来识别丢失的连接。您还可以使用同步 Socket.Receive 并检查引发的异常。

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2011-02-05
    • 2011-02-26
    相关资源
    最近更新 更多