如果我的客户端在另一端端(kill -9 服务器)
的连接中断。客户端需要几分钟时间才能确定出现问题。 Socket.Connected
返回 true,即使连接实际上已断开。
一旦另一端断开链接,确定连接不存在的最快方法是什么?
客户端代码:
try{
Socket socket= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
/*Assume there is a connection on the other end*/
while (socket.Connected)
{
/*Do some processing*/
}
}catch (SocketException se){
Console.WriteLine(ex.Message);
} catch (Exception ex){
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("something bad happen");
}
最佳答案
这似乎对我有用...有人看到任何问题吗?
public bool IsConnected
{
get {return !(Socket.Poll(1, SelectMode.SelectRead)
&& m_socket.Available ==0)}
}
也可以放入扩展方法中。
public static class SocketExtensions
{
public static bool IsConnected(this Socket @this)
{
return !(@this.Poll(1, SelectMode.SelectRead) && @this.Available == 0);
}
}
现在您可以轻松地在处理套接字的代码中使用它。
var mySocket = new Socket();
while(mySocket.IsConncted())
{
// Do Stuff
}
关于c# - 如何判断基于套接字的客户端中的连接是否已断开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/681866/