Android系统有没有提供一个让你方便的获取连接在同一Wifi网段上的其他用户的API呢??答案是否定的,那么Wifi版的飞鸽传书是如何实现这个功能的呢??之前在开发这个项目时,我上网找了很久,也只搜索到mars老师那个视频的搜索Wifi热点的例子。所以,现在发上来给大家分享一下。我个人的理解是“三次握手”。
1、首先,数据接收方Receiver启动广播线程,通过某个特点的端口UDP_BOADCASTPORT,将自己手机本身的名称广播出去,每秒广播一次,代码如下:
// 构造发送数据报 把自己的名字发送出去
byte[] data = username.getBytes();
DatagramPacket outgoing = new DatagramPacket(data, data.length, InetAddress.getByName("255.255.255.255"), UDP_BOADCASTPORT);
同时,数据发送方Sender启动监听广播的线程,通过上述的端口UDP_BOADCASTPORT获得接收方Receiver广播出来的用户名,并通过获得的数据包得到Receiver的IP地址,并以列表的形式显示,供Sender选择。代码如下:
// 构造接收数据报
DatagramPacket incomming = new DatagramPacket(buffer, buffer.length);
datasocket.receive(incomming);// 接收数据报
2、接下来,接收方Receiver在启动广播线程的同时还应该启动获取发送方S
1、首先,数据接收方Receiver启动广播线程,通过某个特点的端口UDP_BOADCASTPORT,将自己手机本身的名称广播出去,每秒广播一次,代码如下:
// 构造发送数据报 把自己的名字发送出去
byte[] data = username.getBytes();
DatagramPacket outgoing = new DatagramPacket(data, data.length, InetAddress.getByName("255.255.255.255"), UDP_BOADCASTPORT);
同时,数据发送方Sender启动监听广播的线程,通过上述的端口UDP_BOADCASTPORT获得接收方Receiver广播出来的用户名,并通过获得的数据包得到Receiver的IP地址,并以列表的形式显示,供Sender选择。代码如下:
// 构造接收数据报
DatagramPacket incomming = new DatagramPacket(buffer, buffer.length);
datasocket.receive(incomming);// 接收数据报
2、接下来,接收方Receiver在启动广播线程的同时还应该启动获取发送方S