【发布时间】:2012-03-01 11:58:46
【问题描述】:
我有一个应用程序正在侦听来自大约 30 辆汽车的调制解调器的消息。我使用 TcpListener 来实现如下所示的服务器代码(省略了错误处理):
...
listener.Start()
...
void
BeginAcceptTcpClient()
{
if(listener.Server.IsBound) {
listener.BeginAcceptTcpClient(TcpClientAccepted, null);
}
}
void
TcpClientAccepted(IAsyncResult ar)
{
var buffer = new byte[bufferSize];
BeginAcceptTcpClient();
using(var client = EndAcceptTcpClient(ar)) {
using(var stream = client.GetStream()) {
var count = 0;
while((count = stream.Read(buffer, total, bufferSize - total)) > 0) {
total += count;
}
}
DoSomething(buffer)
}
我正确收到消息,我的问题在于断开连接。每 12 小时调制解调器重置并获得一个新的 IP 地址,但服务器继续保持旧连接处于活动状态(它们在 tcpview 中标记为 ESTABLISHED)。有没有办法为旧连接设置超时?我认为通过关闭 TcpClient 关闭了 TCP 连接(这就是我本地测试中发生的情况),我做错了什么?
【问题讨论】:
标签: c# asyncsocket tcplistener tcp-ip disconnection