我在Windows Universal应用程序中使用StreamSocket与基于文本的游戏建立TCP / IP连接(套接字在较长时间内保持打开状态)。我连接并返回数据很好。我过去使用的大多数套接字实现都具有属性或功能(或轮询套接字的方式)并获取状态(无论是打开,关闭,损坏,待处理等)。 / p>
我还没有找到使用StreamSocket执行此操作的方法。
我的问题是,如何查询StreamSocket连接的状态以查看它是否已被删除(不等到我向管道发送内容以使其出错)?
,例如,我可以这样做:
if (this.Socket.Status != Status.Connected)
...
答案 0 :(得分:2)
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