zoukankan      html  css  js  c++  java
  • 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(客户端和服务器)两个选项有没有勾上。
     
     
    这样再次运行应该就不会发生异常了
  • 相关阅读:
    JAVA this
    JAVA static关键字
    子类实例化 super
    TCP/IP概述
    Java多态
    植物大战僵尸:寻找阳光掉落Call调用
    JVM总结+个人整理补充--转
    已知微分方程通解求微分方程
    Redis安装过程中的问题
    对称阵和反对称阵
  • 原文地址:https://www.cnblogs.com/masahiro/p/10126999.html
Copyright © 2011-2022 走看看