【发布时间】:2015-05-25 15:15:39
【问题描述】:
刚刚搜索了一个可行的解决方案,以在客户端断开连接时进行识别。 我发现了这个:
public bool IsConnected( Socket s)
{
try
{
return !(s.Poll(1, SelectMode.SelectRead) &&s.Available == 0);
}
catch (SocketException) { return false; }
}
我在我的 main 中使用 thread.sleep(500) 的 while 循环并运行 Isconnectedmthod 当我通过 Visual Studio 运行它时它工作正常,当我单击停止调试时它实际上在服务器端程序中通知我但是当我只是转到 bin 目录中的 exe 并启动它 - 它确实通知我连接但是当我关闭程序(手动从“x”按钮)或通过任务管理器时IsConnected 方法显然仍然返回 true ......
我使用一个简单的 tcp 连接
client = new TcpClient();
client.Connect("10.0.0.2", 10);
服务器:
Socket s = tcpClient.Client;
while(true)
{
if (!IsConnected(s))
MessageBox.Show("disconnected");
}
(顺便说一句,它在线程上运行)。
有什么建议吗? 我什至试图在客户端关闭时关闭连接:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
client.Close();
s.Close();
Environment.Exit(0);
}
不知道怎么办
【问题讨论】:
-
你没有看到很多关于这个问题的答案告诉你这是不可能的吗?您不是第一个尝试检测 TCP 连接丢失的人。
标签: c# multithreading sockets disconnect