作家
登录

在Android上,一个完整的UDP通信模块应该是怎样的?

作者: 来源: 2017-10-17 16:09:18 阅读 我要评论

  •                } 
  •                lastReceiveTime = System.currentTimeMillis(); 
  •                Log.d(TAG, "receive packet success..."); 
  •            } catch (IOException e) { 
  •                Log.e(TAG, "UDP数据包接收掉败!线程停止"); 
  •                stopUDPSocket(); 
  •                e.printStackTrace(); 
  •                return
  •            } 
  •            if (receivePacket == null || receivePacket.getLength() == 0) { 
  •                Log.e(TAG, "无法接收UDP数据或者接收到的UDP数据为空"); 
  •                continue
  •            } 
  •            String strReceive = new String(receivePacket.getData(), 0, receivePacket.getLength()); 
  •            Log.d(TAG, strReceive + " from " + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort()); 
  •            //解析接收到的 json 信息 
  •            // 每次接收完UDP数据后,重置长度。不然可能会导致下次收到数据包被截断。 
  •            if (receivePacket != null) { 
  •                receivePacket.setLength(BUFFER_LENGTH); 
  •            } 
  •        } 
  •    } 
  • 处理接收消息时,有几个值得留意的点:

    • receive 办法是浊宣的,充公到数据包时会一向壅塞,所以要放到子线程中;
    • 每次接收到消息之后,从新调用 receivePacket.setLength;
    • 收到消息刷新lastReceiveTime的值,暂停心跳包的发送;
    • 处理收到的数据具体安营业上就是刚才我们谈的发送数据的问题,视营业而定。

    “用户”的概念

    上文已经谈过了 UDP 的特点,假如一个手机已经开启了热点,若多个手机与他相连接,则多个手机发送的消息它都可以收到。如不雅发送方的端口与接收方的端口雷同的话,甚至本身发的消息,本身都可以收到。这就很难堪了,也就是说我们既要剔除本身发给本身的消息,也得区分不合手机发来的消息,这个时刻就理应有一个“用户”的概念。

    创建 User 对象,有哪些属性可以看本身的营业,本文的例子就有 ip、imei、以及 softversion。

    1. /** 
    2.     * 创建本地用户信息 
    3.     */ 
    4.    private void createUser() { 
    5.        if (localUser == null) { 

        推荐阅读

        R语言可视化之UpSetR包

      简介集合可视化我们用得最多的是韦恩图,韦恩图在集合数少的时刻是很好用的,然则当集合数多比如五个以上的时刻那就会看花眼了,比如下面这副含有6个集合韦恩图,是揭橥在Nature汕9依υ?┞仿里的,漂>>>详细阅读


      本文标题:在Android上,一个完整的UDP通信模块应该是怎样的?

      地址:http://www.17bianji.com/lsqh/38001.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)