C# 用于检查设备连接的SteamSocket TCP

C# 用于检查设备连接的SteamSocket TCP,c#,tcp,uwp,windowsiot,C#,Tcp,Uwp,Windowsiot,我正在使用“StreamSocket”“Tcp”连接在Windows IoT Core上的主机和客户端设备之间进行通信。目前,我使用每秒轮询来检查客户端设备的连接状态。我想知道是否有更好、更有效的方法。谢谢 据我所知,没有比这更好的方法了。有两种检测StreamSocket断开的方法: 发送心跳消息以监视另一个sideserver是否已关闭。 读取0长度表示流的结束。 此外,您还可以通过检测网络连接。通过检测,应用程序可以知道网络是否无效,因为这是导致StreamSocket断开连接的主要原因。

我正在使用“StreamSocket”“Tcp”连接在Windows IoT Core上的主机和客户端设备之间进行通信。目前,我使用每秒轮询来检查客户端设备的连接状态。我想知道是否有更好、更有效的方法。谢谢

据我所知,没有比这更好的方法了。有两种检测StreamSocket断开的方法:

发送心跳消息以监视另一个sideserver是否已关闭。 读取0长度表示流的结束。 此外,您还可以通过检测网络连接。通过检测,应用程序可以知道网络是否无效,因为这是导致StreamSocket断开连接的主要原因。更多信息请参见

如果将主机更改为服务器,将所有设备更改为连接到主机的客户端,则可以通过开始侦听tcp端口。该事件可能检测到传入的连接和状态已更改

        StreamSocketListener listener = new StreamSocketListener();
        listener.ConnectionReceived += OnConnection;


    private async void OnConnection(
        StreamSocketListener sender, 
        StreamSocketListenerConnectionReceivedEventArgs args)
    {
        DataReader reader = new DataReader(args.Socket.InputStream);
        try
        {
            while (true)
            {
                // Read first 4 bytes (length of the subsequent string).
                uint sizeFieldCount = await reader.LoadAsync(sizeof(uint));
                if (sizeFieldCount != sizeof(uint))
                {
                    // The underlying socket was closed before we were able to read the whole data.
                    //Detect disconnection
                    return;
                }

                // Read the string.
                uint stringLength = reader.ReadUInt32();
                uint actualStringLength = await reader.LoadAsync(stringLength);
                if (stringLength != actualStringLength)
                {
                    // The underlying socket was closed before we were able to read the whole data. 
                    //Detect disconnection
                    return;
                }

                //TO DO SOMETHING
            }
        }
        catch (Exception exception)
        {
             //TO DO SOMETHING
        }
    }

检测不正常的断开连接确实是有史以来最烦人的事情之一。@MichealXu MSFT谢谢。@NPras您有什么建议来处理它吗?引用这句话:断开的连接只能通过发送数据来检测。您的heartbeat/keepalive方法和捕获所有可能失败的不同方式通常是一条可行之路。