起首 android 手机开启热点,可以懂得成一个网关,有一个默认的 ip 地址:"192.168.43.1"
这个 ip 地址不是我瞎编的一个,在 Android 源码之中,就是这么定义的:
WifiStateMachine
UDP 在 Java 中的应用
- ifcg = mNwService.getInterfaceConfig(intf);
- if (ifcg != null) {
- /* IP/netmask: 192.168.43.1/255.255.255.0 */
- ifcg.setLinkAddress(new LinkAddress(
- NetworkUtils.numericToInetAddress("192.168.43.1"), 24));
- ifcg.setInterfaceUp();
- mNwService.setInterfaceConfig(intf, ifcg);
- }
所以我是知道所谓打开热点一方的 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、或者其他事宜总线的三方库都没问题,看你本身选择了。
处理接收的消息
- /**
- * 处理接收到的消息
- */
- private void receiveMessage() {
- while (isThreadRunning) {
- try {
- if (client != null) {
- client.receive(receivePacket);
推荐阅读
简介集合可视化我们用得最多的是韦恩图,韦恩图在集合数少的时刻是很好用的,然则当集合数多比如五个以上的时刻那就会看花眼了,比如下面这副含有6个集合韦恩图,是揭橥在Nature汕9依υ?┞仿里的,漂>>>详细阅读
本文标题:在Android上,一个完整的UDP通信模块应该是怎样的?
地址:http://www.17bianji.com/lsqh/38001.html
1/2 1