【发布时间】:2010-08-20 15:32:17
【问题描述】:
我必须写一个TCP Client 才能重新连接到服务器。由于网络连接质量差或某些维护问题,服务器可能不可用。我正在寻找该领域的优质解决方案。
我目前的解决方案如下:
- 在 ConnectionState 枚举中保持连接状态 {Offline, Online, Connecting}
- 使用
TcpClient类创建客户端。 - 创建两个名为
ConnectionCheckTimer和ReconnectTimer的计时器 - 连接到服务器
- 启动阅读器线程和连接检查计时器
- 使用 tcpClient.GetStream() 执行读取,然后从此流中读取
- 当 readerLoop 中捕获到异常时,客户端状态更改为脱机并启动 ReconnectTimer
-
ConnectionCheckTimer定期检查 lastMessageTimestamp 并将其与当前时间进行比较,如果间隔大于 maxValue 则启动ReconnectTimer
目前我对这个解决方案不满意,因为它仍然会在 TcpClient.NetworkStream 上生成 ObjectDisposedException 等异常。我正在寻找一些干净且可重用的 Tcp 重新连接客户端实现,它能够处理在连接、断开连接、读取数据期间可能发生的所有套接字问题。
【问题讨论】:
标签: c# .net sockets tcp tcpclient