Windows8 Metro界面下的StreamSocketListener对象做监听端口

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(客户端和服务器)两个选项有没有勾上。
 
 
这样再次运行应该就不会发生异常了
posted @ 2013-01-09 16:33  安培昌浩  阅读(347)  评论(0编辑  收藏  举报