作家
登录

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

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

起首 android 手机开启热点,可以懂得成一个网关,有一个默认的 ip 地址:"192.168.43.1"

这个 ip 地址不是我瞎编的一个,在 Android 源码之中,就是这么定义的:

WifiStateMachine

UDP 在 Java 中的应用

  1. ifcg = mNwService.getInterfaceConfig(intf); 
  2.                         if (ifcg != null) { 
  3.                             /* IP/netmask: 192.168.43.1/255.255.255.0 */ 
  4.                             ifcg.setLinkAddress(new LinkAddress( 
  5.                                     NetworkUtils.numericToInetAddress("192.168.43.1"), 24)); 
  6.                             ifcg.setInterfaceUp(); 
  7.                             mNwService.setInterfaceConfig(intf, ifcg); 
  8.                         } 

所以我是知道所谓打开热点一方的 ip 地址,而 UDP 发送消息时还有一个特点,就是发出去的消息,处在全部网关的设备是都可以接收到的,所以我本身的 ip 地址就定为了 "192.168.43.255",所以这个 ip 地址和 "192.168.43.1" 在同一网关中,你发送的消息,它是可以收到的。

先来说数据,两边发送的数据格局你们可以随便定义,当然我认为照样定义成惯例的 Json 格局就好。个中可以包含一些关键的事宜字段:比如广播心跳包、收到心跳包给对方上线的应答包、超时的下线包、以及各类营业相干的数据等等。

至于怎么断定两个 ip 地址是否处在同一网段中:

最后调用 startSocketThread 启动发送和吸法术据的线程。

断定两个IP大年夜小及是否在同一个网段中

来做一个阶段总结:

起首我们创建了一个发送端 DatagramSocket,启动了一个心跳法度榜样,每距离一段时光发送一个心跳包。

因为我知道热点方的 ip 地址是默认的 "192.168.43.1",并且 UDP 的特点就是发送的消息同一网段的设备都可以收到。所以发送方的 ip 地址定为了与热点一方处在同一网段的 "192.168.43.255"。

然后又创建了一个 DatagramPacket 对象,作为数据的接收包。

事宜与数据

这里我每隔十秒向对方发送了一个字符串。

事宜与数据这两个模块与营业就慎密相干了。

当然发送数据时是转换成二进制数组发送的。发送中文字符、图片等都没有问题,然则可能有一些细节须要留意,随时 google 一下就好了。

再来说下事宜:

与营业无关的事宜有哪些?

比如:

  • DatagramSocket.send 办法之后就是发送数据成功的事宜;
  • DatagramSocket.receive 办法之后是数据接收成功的事宜;
  • 在心跳包发送一段时光,仍没有接到回信时,是连接超时的事宜;
  • 与营业相干的事宜就和我们上文提到的数据类型有关了,设备上线,心跳包回应等等。

事宜又若何发送出去,通知到各个页面呢?用 Listener、或者其他事宜总线的三方库都没问题,看你本身选择了。

处理接收的消息

  1. /** 
  2.     * 处理接收到的消息 
  3.     */ 
  4.    private void receiveMessage() { 
  5.        while (isThreadRunning) { 
  6.            try { 
  7.                if (client != null) { 
  8.                    client.receive(receivePacket); 

  9.   推荐阅读

      R语言可视化之UpSetR包

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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