相比于有连接的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类来包装一段申请的数组,需要发送的时候,将数据写入到这段内存当中即可。
欢迎光临 博航智能圈 (http://www.broadon.net/club/) | Powered by Discuz! X2 |