异步客户端套接字,检查连接状态

时间:2014-03-06 21:28:37

标签: c# .net sockets asynchronous xamarin

我有一个异步客户端套接字,我想确定我是否仍然连接。我在下面有这个功能,确定我是否已连接;但是,它并不总是有效。连接后,此功能正确告诉我我已连接。如果我杀死了这个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具备一切重要性。

0 个答案:

没有答案