【问题标题】:Get a StreamSocket's Connection Status (UWP)获取 StreamSocket 的连接状态 (UWP)
【发布时间】:2017-02-09 18:59:47
【问题描述】:

我在 Windows 通用应用程序中使用 StreamSocket 与基于文本的游戏建立 TCP/IP 连接(套接字长时间保持打开状态)。我让它连接并返回数据正常。我过去使用的大多数套接字实现都有一个属性或函数(或一种轮询套接字的方法)并获取状态(无论是打开、关闭、损坏、挂起等)。

我还没有找到使用 StreamSocket 的方法。

我的问题是,如何查询 StreamSocket 连接的状态以查看它是否已被丢弃(无需等到我通过管道发送某些内容以使其出错)?

例如,我可以这样做:

if (this.Socket.Status != Status.Connected)...

【问题讨论】:

    标签: c# sockets uwp win-universal-app


    【解决方案1】:

    if (this.Socket.Status != Status.Connected)

    你写的代码很优雅,但是据我所知uwp没有提供这样的api。

    Windows.Networking.Sockets 命名空间具有方便的辅助方法和枚举,用于在使用套接字和 WebSocket 时处理错误。这对于在您的应用中以不同方式处理特定网络异常非常有用。

    DatagramSocket、StreamSocket 或 StreamSocketListener 操作中遇到的错误将作为 HRESULT 值返回。 SocketError.GetStatus 方法用于将网络错误从套接字操作转换为SocketErrorStatus 枚举值。大多数SocketErrorStatus 枚举值对应于本机Windows 套接字操作返回的错误。应用可以过滤特定的SocketErrorStatus 枚举值,以根据异常原因修改应用行为。

    对于参数验证错误,应用还可以使用异常中的HRESULT 来了解有关导致异常的错误的更多详细信息。 Winerror.h 头文件中列出了可能的HRESULT 值。对于大多数参数验证错误,返回的HRESULT 是 E_INVALIDARG .

    【讨论】:

    • 我接受了答案,如果我理解你的意思,这听起来像是在不首先遇到异常的情况下查询套接字的状态是不可能的(在我尝试发送之前它们似乎不会被抛出连接断开后的数据)。
    • 对后代的后续评论,.Net Standard 2 使这更容易管理。使用 TcpClient 和 TcpReader 可以更容易地在 Disconnect 发生异常时从 Disconnect 获取异常,而无需通过管道发送某些内容来触发异常。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多