UDP协议是非连接协议,不与目标地址建立连接,简单说就是只负责发送给目标地址数据,不等待目标返回结果。每次发送只能是少量数据,不过可以少量多次发送,发送几M的图片还是没问题的。
以下是我发送数据和接收数据的相关代码,以供参考。
-
java基于UDP协议发送数据(客户端):
/***
*
* @param licensePlate 业务数据
* @param platPicUrls 业务图片地址
* @param pudipconfig 目标地址ip、端口号,服务地址的端口号(用于监听是否有数据进入)
* @throws Exception
*/
public void sendAllUDP(LicensePlate licensePlate, List<String> platPicUrls,Pudipconfig pudipconfig) throws Exception {
//初始化用于发送数据
byte[] buf = new byte[UDPUtils.BUFFER_SIZE];
//初始化用户接收数据
byte[] receiveBuf = new byte[100];
//定义照片
RandomAccessFile accessFile = null;
//定义服务端
DatagramSocket dsk = null;
//定义数据包
DatagramPacket dpk;
//定义读取大小
int readSize;
try {
//初始化服务端 参数为端口号,作用在于监听该端口号是否有数据交互
dsk = new DatagramSocket(Integer.parseInt(pudipconfig.getExt1()));
//初始化数据包 参数为:byte类型存放数据,数据大小,目标地址,目标端口
dpk = new DatagramPacket(buf, buf.length,new InetSocketAddress(InetAddress.getByName(pudipconfig.getIpaddress()), Integer.parseInt(pudipconfig.getIpport())));
//将需要发送的业务数据转成byte类型并放入数据包
dpk.setData(licensePlate.getLicenseplatenumber().getBytes("UTF-8"),0,licensePlate.getLicenseplatenumber().getBytes().length);
//发送数据
dsk.send(dpk);
//为保证数据准确性,在每次发送数据后等待目标地址反向调用发送端的ip+端口,并用receiveBuf存下返回的数据是否成功
//该方式只适用于单对单传输
dpk.setData(receiveBuf, 0, receiveBuf.length);