Android如何在局域网中发送广播
来源:互联网 发布:轩辕剑神器进阶数据 编辑:程序博客网 时间:2024/05/17 19:59
Android如何在局域网中发送广播
目前做的项目是当两个设备都接入一个Wifi热点后可以找到对方。如何找呢?大家一下子就会想到发送广播,对的就是发送广播。下面是一个实例如何发送一个UDP广播的例子。首先端口是事先约定好的,
Android端代码:
static void sendBroadCastToCenter(){ WifiManager wifiMgr = (WifiManager) App.getContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); /*这里获取了IP地址,获取到的IP地址还是int类型的。*/ int ip = wifiInfo.getIpAddress(); /*这里就是将int类型的IP地址通过工具转化成String类型的,便于阅读 String ips = Formatter.formatIpAddress(ip); */ /*这一步就是将本机的IP地址转换成xxx.xxx.xxx.255*/ int broadCastIP = ip | 0xFF000000; DatagramSocket theSocket = null; try { InetAddress server = InetAddress.getByName(Formatter.formatIpAddress(broadCastIP)); theSocket = new DatagramSocket(); String data = "Hello"; DatagramPacket theOutput = new DatagramPacket(data.getBytes(), data.length(), server, mPort); /*这一句就是发送广播了,其实255就代表所有的该网段的IP地址,是由路由器完成的工作*/ theSocket.send(theOutput); } catch (IOException e) { e.printStackTrace(); } finally { if (theSocket != null) theSocket.close(); } }
通过上面的代码就算发送出去了,但怎么也的有个接收的吧。对啊,如果谁也不接收,发送广播就没有意义了。
接收端代码:
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;public class UDPDiscardSServer { public static void main(String[] args){ byte[] buffer = new byte[1024]; /*在这里同样使用约定好的端口*/ int port = 8091; DatagramSocket server = null; try { server = new DatagramSocket (port); DatagramPacket packet = new DatagramPacket(buffer, buffer.length); while(true){ try { server.receive(packet); String s = new String(packet.getData(), 0, packet.getLength(), "UTF-8"); System.out.println("address : " + packet.getAddress() + ", port : " + packet.getPort() + ", content : " + s); } catch (IOException e) { e.printStackTrace(); } } } catch (SocketException e) { e.printStackTrace(); }finally{ if(server != null) server.close(); } }}
最后
有的路由器是禁止发送广播的,那只能采用扫描的方式了,其实效率也挺高的毕竟没有几个IP地址。附带一个扫码的代码,其实和刚才的代码非常相似。
....... int ip = wifiInfo.getIpAddress(); int broadCastIP = ip | 0xFF000000; for (int i = 0; i < 256; i++) { ..... /*通过这个循环就将所有的本段中的所有IP地址都发送一遍了*/ InetAddress server = InetAddress.getByName(Formatter.formatIpAddress(broadCastIP | ((0xFF - i) << 24))); ...... } ........
0 0
- Android如何在局域网中发送广播
- android中如何发送一个广播
- android中如何发送一个广播
- android中如何发送一个广播
- android如何在底层发送一个广播应用层接收
- 如何在应用中发送自己定义的广播Broadcast
- 在局域网中发送消息
- udp 局域网广播发送代码
- 如何使用Socket在局域网内进行广播
- Android中Service发送广播给activity
- Android中broadcastreceiver发送广播信息
- Android中通过ADB手动发送广播
- Android中发送有序广播案例
- Android开发初级00_1如何在安卓开发之发送广播
- 局域网下UDP广播发送与接收
- 在Android Manifest中注册DownloadManager下载完成发送的广播
- Android中在native层对java层应用程序发送广播方法及原理
- 如何设置mysql在局域网中访问
- 八皇后问题解法(Lua版)
- QTreeWidget学习之拖拽节点后,需要点击两次节点才生效
- ADT下载地址,完整版
- jsp分页总结
- 【1】【匹配】HDU5821 Ball
- Android如何在局域网中发送广播
- Memcache简单使用
- C++学习002-C++代码中插入汇编语句
- 数据挖掘中的矩阵基础(2)
- Intelij idea的调试快捷键
- 在while中使用cin>>a 为条件,注意事项
- hdu 2795 Billboard线段树运用(单点更新)
- Android Java Web实现登录注册(一)——客户端
- ViewPager嵌套Viewager嵌套问题