相比于有连接的TCP协议来说,无连接的UDP协议也拥有着很多的使用环境。当对数据的安全性要求不是很高或者速度要求比较高的时候,我们要使用UDP协议来实现。下面我们来封装一个UDP的工具类来通过网络接收数据。 private DatagramSocket udpSocket = null; private DatagramPacket udpPacketR = null; private DatagramPacket udpPacketW = null; private WifiManager wifiManager = null; 首先我们要定义出需要的通信变量。 try { udpSocket = new DatagramSocket(TotalData.routePort); udpSocket.setReceiveBufferSize(1024); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } 通过系统的构造函数来创建新的socket对象并设定对应的端口号和接受缓冲的大小。 try { udpPacketR = new DatagramPacket(data, data.length, InetAddress.getByName(TotalData.routeIp), TotalData.routePort); udpSocket.receive(udpPacketR); log.E("---" + printHex(data)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); log.E("%%%%% wifi read() data is error !!!! %%%%%"); return null; } 当接收数据的时候,我们需要一个DatagramPacket类来包装一段事先申请的内存空间来实现接收数据。 try { udpPacketW = new DatagramPacket(data, data.length, InetAddress.getByName(TotalData.routeIp), TotalData.routePort); udpSocket.send(udpPacketW); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); log.E("%%%%% wifi write() data is Exception !!!! %%%%%"); return false; } 发送数据的时候也是类似,使用DatagramPacket类来包装一段申请的数组,需要发送的时候,将数据写入到这段内存当中即可。
|