StreamSocketListener 是一个很方便的服务器监听对象,利用它我们可以很简单的实现对服务器端口的监听。使用StreamSocketListener对象进行监听需要以下几步:
1. 实例化一个StreamSocketListener对象
2. 注册实例收到连接时的事件
3. 开启监听指定端口
代码如下:
StreamSocketListener listener = new StreamSocketListener(); listener.ConnectionReceived += listener_ConnectionReceived; await listener.BindServiceNameAsync("6060"); 连接时的事件代码如下: private async void listener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) { DataReader reader = new DataReader(args.Socket.InputStream); try { while (true) { //这里由于我的发包规则会在包的最前面描述包的长度,所以我先把长度读取出来 uint stringLength = reader.ReadUInt32(); //然后获取真正未读的长度 uint actualStringLength = await reader.LoadAsync(stringLength); if (stringLength != actualStringLength) { //如果我描述的长度和实际读取的长度不相符说明包数据不完整,可能是对方提早关闭了连接,停止监听 return; } //然后读取数据 string data = reader.ReadString(actualStringLength); //这里我把数据加到了另外一个控件里面用来显示 lstMessage.Items.Add(data); } } catch (Exception exception) { //这里可以获取各种异常的状态 if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown) { } } }
这样就完成了,下面还有一个问题需要注意。
如果在实例化 StreamSocketListener 时就发生 拒绝访问 异常那么检查一下 应用程序清单(Package.appxmanifest)中功能选项卡下的Internet(客户端) 和Internet(客户端和服务器)两个选项有没有勾上。
![](https://img2018.cnblogs.com/blog/1564514/201812/1564514-20181216163202839-569629493.png)
这样再次运行应该就不会发生异常了