【问题标题】:Proper implementation of C# TCP reconnecting clientC# TCP重连客户端的正确实现
【发布时间】:2010-08-20 15:32:17
【问题描述】:

我必须写一个TCP Client 才能重新连接到服务器。由于网络连接质量差或某些维护问题,服务器可能不可用。我正在寻找该领域的优质解决方案。

我目前的解决方案如下:

  • 在 ConnectionState 枚举中保持连接状态 {Offline, Online, Connecting}
  • 使用TcpClient 类创建客户端。
  • 创建两个名为ConnectionCheckTimerReconnectTimer 的计时器
  • 连接到服务器
  • 启动阅读器线程和连接检查计时器
  • 使用 tcpClient.GetStream() 执行读取,然后从此流中读取
  • 当 readerLoop 中捕获到异常时,客户端状态更改为脱机并启动 ReconnectTimer
  • ConnectionCheckTimer 定期检查 lastMessageTimestamp 并将其与当前时间进行比较,如果间隔大于 maxValue 则启动 ReconnectTimer

目前我对这个解决方案不满意,因为它仍然会在 TcpClient.NetworkStream 上生成 ObjectDisposedException 等异常。我正在寻找一些干净且可重用的 Tcp 重新连接客户端实现,它能够处理在连接、断开连接、读取数据期间可能发生的所有套接字问题。

【问题讨论】:

    标签: c# .net sockets tcp tcpclient


    【解决方案1】:

    如果您遇到连接问题,总会有例外。我认为你有一个合理的大纲,你只需要处理异常。您可以从您自己的 Socket 类实现开始并编写 TCPIP 服务器。入门代码在 MS:

    http://msdn.microsoft.com/en-us/library/fx6588te(VS.71).aspx

    C# 代码位于 VB 页面的一半。

    【讨论】:

      【解决方案2】:

      您应该使用的类是“SocketAsyncEventArgs”。 我在这个项目中使用过它:

      http://ts3querylib.codeplex.com/

      看看 AsyncTcpDispatcher 类。

      【讨论】:

        猜你喜欢
        • 2010-10-31
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        • 1970-01-01
        • 2010-11-18
        • 2017-12-30
        • 2016-04-22
        相关资源
        最近更新 更多