【DSP系统】Java UDP通信模拟监听模块

UDP特点

  • 无连接,不可靠,会造成数据丢失
  • 速度快,因为无需进行三次握手
  • 限制数据传输大小64K

发送端

发送端模拟ADx发送竞价请求,这里采用从文件中按行读取数据,然后发送给接收端的方式。

public static void main(String[] args) throws Exception {
//DatagramSocket类表示用来发送和接收(udp)数据报包的套接字。
DatagramSocket ds = new DatagramSocket();
//获取本机ip地址
String localIp = InetAddress.getLocalHost().getHostAddress();
//读取文件名
String fileName = "D://datasets//ipinyou.contest.dataset//ipinyou.contest.dataset//training2nd//training2nd//conv.20130610.txt";
// read file content from file
//StringBuffer sb= new StringBuffer("");
FileReader reader = new FileReader(fileName);
BufferedReader br = new BufferedReader(reader);
String str = null;
while((str = br.readLine()) != null) {
//sb.append(str+"/n");
System.out.println(str);
//需要发送的数据
//byte[] buf = "Hello Udp".getBytes();
byte[] buf = str.getBytes();
//将数据传送到本地ip,端口为9999
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(localIp), 9999);
//发送数据报包
ds.send(dp);
}
br.close();
reader.close();
//关闭资源
ds.close();
System.out.println("Done.");
}

接收端

public class ListenModule {
public static void main(String[] args) throws Exception {
//创建udp服务对象,指定接收端口号为9999的报包
DatagramSocket ds = new DatagramSocket(9999);
//构造空的数据报包, 用于存储待会接收到的数据报包
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
while (true){
//接收数据
ds.receive(dp);
//显示数据
String ipAddress = dp.getAddress().getHostAddress();
int port = dp.getPort();
String datas = new String(dp.getData(), 0, dp.getLength());
//System.out.println(ipAddress + "::" + datas + "::" + port);
System.out.println(datas);
}
//ds.close();
}
}

运行时先运行接收端,后运行发送端