3

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

我目前的解决方案如下:

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

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

4

2 回答 2

1

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

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

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

于 2010-08-10T20:04:38.930 回答
0

The class you should use is "SocketAsyncEventArgs". I've used it in this project:

http://ts3querylib.codeplex.com/

Have a look at the AsyncTcpDispatcher class.

于 2010-08-20T07:32:17.457 回答