基于UDP相互发送消息的demo
一、demo功能与意义
本次demo主要是为了演示基于UDP协议的应用方式.由两段代码组成:
(1) UDPProvider端的作用是接收UDPSearcher端发送过来的数据,并回送到UDPSearcher一个字符串数据.
(2) UDPSearcher端的作用是向UDPProvider端发送一段数据,并接收由UDPProvider端发送过来的数据.
二、demo工作流程图
三、demo源代码
(1) UDPProvider端代码
package socket.SocketDemo2.demo1;
import socket.SocketDemo2.MessageCreator;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/**
* Created by lifuqing on 2019/4/8 15:39
* Email : [email protected]
*/
public class UDPProvider {
public static void main(String [] args) throws IOException {
System.out.println("UDPProvider Started.");
// 监听20000 端口
DatagramSocket ds = new DatagramSocket(20000);
// 构建接收实体
final byte[] buf = new byte[512];
DatagramPacket receivePack = new DatagramPacket(buf, buf.length);
// 接收数据并将数据放到实体receivePack中
ds.receive(receivePack);
// 打印接收到的信息与发送者的信息
// 发送者的IP地址
String ip = receivePack.getAddress().getHostAddress();//从实体中获得IP地址
int port = receivePack.getPort();//端口
int dataLen = receivePack.getLength();//大小
String data = new String(receivePack.getData(), 0, dataLen);//获得数据
//输出
System.out.println("UDPProvider receive form ip:" + ip + "\tport:" + port + "\tdata:" + data);
//构建一份回送数据
String responseData = "Receive data with len:"+data.length();
byte[] responseDataBytes = responseData.getBytes();
// 直接根据发送者构建一份回送信息
DatagramPacket responsePacket = new DatagramPacket(responseDataBytes,
responseDataBytes.length,
receivePack.getAddress(),
receivePack.getPort());
ds.send(responsePacket);
System.out.println("UDPProvider Finished.");
ds.close();
}
}
(2) UDPSearcher端代码
package socket.SocketDemo2.demo1;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
* Created by lifuqing on 2019/4/8 15:39
* Email : [email protected]
*/
public class UDPSearcher {
public static void main(String [] args) throws IOException {
System.out.println("UDPSearcher Started.");
// 作为搜索方,无需指定端口
DatagramSocket ds = new DatagramSocket();
//构建一份请求数据
String requestData = "Hello world";
byte[] requestDataBytes = requestData.getBytes();
// 直接根据发送者构建一份回送信息
DatagramPacket responsePacket = new DatagramPacket(requestDataBytes, requestDataBytes.length);
responsePacket.setAddress(InetAddress.getLocalHost());
responsePacket.setPort(20000);
//发送
ds.send(responsePacket);
// 构建接收实体
final byte[] buf = new byte[512];
DatagramPacket receivePack = new DatagramPacket(buf, buf.length);
// 接收数据并将数据放到实体receivePack中
ds.receive(receivePack);
// 打印接收到的信息与发送者的信息
// 发送者的IP地址
String ip = receivePack.getAddress().getHostAddress();//从实体中获得IP地址
int port = receivePack.getPort();//端口
int dataLen = receivePack.getLength();//大小
String data = new String(receivePack.getData(), 0, dataLen);//获得数据
//输出
System.out.println("UDPSearcher receive form ip:" + ip + "\tport:" + port + "\tdata:" + data);
//完成
System.out.println("UDPSearcher Finished.");
ds.close();
}
}
四、总结
本文介绍了最简单的一种UDP应用的demo,并画了一副demo工作流程图,用以梳理UDP工作流程.如有不足之处,清大家多多指教.