hololens2 通信 之 Windows.Networking.Sockets

Windows.Networking.Sockets:
这个命名空间用来提供用于网络通信的套接字和 websocket 类,以及用于 UWP 应用程序后台接收的实时网络通知的类。

  •   所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口 。
      Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制
      套接字Socket=(IP地址:端口号),套接字的表示方法是点分十进制的lP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。例如:如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23)

简要介绍其中两个主要类:

StreamSocketListener 类:
它支持使用 TCP 流套接字或 Bluetooth RFCOMM 侦听传入的网络连接。StreamSocketListener 类支持使用流套接字侦听传入的网络连接并接受连接。
典型的运行顺序如下:

  • 创建StreamSocketListener 对象
  • 使用 Control 属性检索 StreamSocketListenerControl 对象并设置所需的套接字服务质量。
  • 将 ConnectionReceived 事件分配给事件处理程序。
  • 调用 BindServiceNameAsync 或 bindenppointasync 方法绑定到本地 TCP 端口号或服务名称。对于 Bluetooth RFCOMM,本地服务名称参数是 Bluetooth 服务 ID。
  • StreamSocketListenerConnectionReceivedEventArgs 对象来检索创建的 StreamSocket 对象的 Socket 属性。
  • 使用 StreamSocket 对象发送和接收数据。
  • 调用 Close 方法停止侦听和接受传入的网络连接,并释放与 StreamSocketListener 对象关联的所有非托管资源。接收到连接时创建的任何 StreamSocket 对象都不会受到影响,并且可以根据需要继续使用。

在 StreamSocketListener 类上调用异步方法时,必须编写处理异常的代码。参数验证错误、名称解析错误和网络错误可能导致异常。网络错误的异常(例如连接丢失、连接故障和服务器故障)可能随时发生。这些错误导致抛出异常。如果应用程序没有处理异常,则可能导致整个应用程序被运行时终止。
StreamSocket 类:
StreamSocket 类支持在 UWP 应用程序中使用 TCP 上的流套接字或蓝牙 RFCOMM 的网络通信。
对于一个客户端应用程序,使用 StreamSocket 最常见的操作序列如下:

  • 创建StreamSocket
  • 使用 Control 属性获取 StreamSocketControl 对象,并在调用一个 ConnectAsync 方法之前设置 StreamSocketControl 对象上的任何属性。
  • 调用一个 ConnectAsync 方法来建立与远程端点的连接。对于蓝牙,远程服务名称是一个蓝牙服务 ID。如果 TCP 需要 SSL/TLS 连接,或者需要立即对蓝牙进行加密,那么可以使用一些 ConnectAsync 方法来指定。如果在发送和接收 TCP 套接字的一些初始数据之后需要 SSL/TLS 连接,那么稍后可以调用 UpgradeToSslAsync 方法来将连接升级到使用 SSL。
  • 获取 OutputStream 属性将数据写入远程主机。
  • 获取 InputStream 属性以从远程主机读取数据。
  • 根据需要读写数据。
  • 调用 Close 方法断开套接字,中止任何挂起的操作,并释放与 StreamSocket 对象关联的所有非托管资源。

猜你喜欢

转载自blog.csdn.net/ZhangJingHuaJYO/article/details/124375232
今日推荐