我有一个异步客户端套接字,我想确定我是否仍然连接。我在下面有这个功能,确定我是否已连接;但是,它并不总是有效。连接后,此功能正确告诉我我已连接。如果我杀死了这个AsyncClient正在与之交谈的其他程序,这个功能正确地告诉我我已断开连接。但如果我通过拔插头和/或断开wifi来断开互联网连接,它并没有告诉我我已经断开连接。有什么想法吗?有什么想法我应该检查连接状态?有没有一个事件告诉我,我失踪了?
The code I'm using is referenced almost word for word from here
我的功能,以确定我是否已连接(reference)
public static bool SocketConnected(Socket s)
{
if ( s != null )
{
bool part1 = s.Poll(1000, SelectMode.SelectRead);
bool part2 = (s.Available == 0);
Console.WriteLine("SocketConnected part1 = "+ part1 + " part2 = "+ part2 + " socket.Connected =" + s.Connected);
if ((part1 && part2 ) || !s.Connected)
return false;
else
return true;
}
else
{
Console.WriteLine("SocketConnected Socket is null");
return false;
}
}
控制台输出:
输出我在连接时看到了
SocketConnected part1 = False part2 = True socket.Connected = True
输出我在停止python程序后看到我已连接到
SocketConnected part1 = True part2 = True socket.Connected = True
您可以看到part1翻转为true ...
输出我在连接时看到了
SocketConnected part1 = False part2 = True socket.Connected = True
输出我在拔掉互联网上的插件后看到:
SocketConnected part1 = False part2 = True socket.Connected = True
你可以看到part1仍然是假的,而socket.Connected仍然是真的...所以这个函数不知道我丢失了互联网连接。
Dropbox link to example project。请注意,通过运行代码,您可能无法通过Internet连接到我的服务器(如果我在测试时将其关闭),但欢迎您查看代码。 TomTestViewController.cs& AsyncClient.cs具备一切重要性。