UDP传输的关键代码如下:
public class UdpHelper { private int port = "12345"; public UdpHelper(int port) { this.port = port; } //发送,确认和接收端是在同一网络下 public boolean sendByte(byte[] bytes) { DatagramSocket ds = null; try { ds = new DatagramSocket(); if (bytes == null) return false; DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("255.255.255.255"), port); ds.send(dp); ds.close(); return true; } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } //接收,确认和发送端是在同一网络下 public byte[] getBytes() { byte[] buf = new byte[1024]; DatagramSocket ds = null; DatagramPacket dp = null; try { ds = new DatagramSocket(port); dp = new DatagramPacket(buf, 1024); ds.receive(dp); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (ds != null) { ds.close(); } } if (dp == null) return null; final byte[] netBuf = new byte[dp.getLength()]; System.arraycopy(dp.getData(), dp.getOffset(), netBuf, 0, netBuf.length); return netBuf; } }
前段时间要做一个基于UDP传输数据的apk,当时只弄了一天多,还没弄完就交接给同事弄其他的去了,所以界面特丑,也没什么其他的功能,就不上图了,有需要就去下载。APK除了实现了数据传输的功能,还用到了滑动退出SwipeBack及本地数据库litepal两个第三方架。
PS:UDP是不安全协议,数据可能会丢失,特别注意需要在同一网络下操作,开始不知道被坑了半天(我这连的是同一热点);进入APP后先点接收,点发送可以测试,UDP支持多方发送和接收。
下载地址: