UDP网络程序

本文记录Java学习过程中遇到的UDP网络程序~

下图为UDP发送端与接收端交互图解:

要实现UDP通信需要创建一个发送端程序和一个接收端程序,很明显,在通信时只有接收端程序先运行,才能避免因发送端发送的数据无法接收,而造成数据丢失。因此,首先需要来完成接收端程序的编写。

示例代码(发送端):

public class UDPSend {
	public static void main(String[] args) throws IOException {
		//1,创建DatagramSocket对象
		DatagramSocket sendSocket = new DatagramSocket();
		//2,创建DatagramPacket对象,并封装数据
		//public DatagramPacket(byte[] buf, int length, InetAddress address,  int port)
		//构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
		byte[] buffer = "hello,UDP".getBytes();
		DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.75.58"), 12306);
		//3,发送数据
		//public void send(DatagramPacket p) 从此套接字发送数据报包
		sendSocket.send(dp);
		//4,释放流资源
		sendSocket.close();
	}
}

示例代码(接收端):

public class UDPReceive {
	public static void main(String[] args) throws IOException {
		//1,创建DatagramSocket对象,并指定端口号
		DatagramSocket receiveSocket = new DatagramSocket(12306);
		//2,创建DatagramPacket对象, 创建一个空的仓库
		byte[] buffer = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buffer, 1024);
		//3,接收数据存储到DatagramPacket对象中
		receiveSocket.receive(dp);
		//4,获取DatagramPacket对象的内容
		//谁发来的数据  getAddress()
		InetAddress ipAddress = dp.getAddress();
		String ip = ipAddress.getHostAddress();//获取到了IP地址
		//发来了什么数据  getData()
		byte[] data = dp.getData();
		//发来了多少数据 getLenth()
		int length = dp.getLength();
		//显示收到的数据
		String dataStr = new String(data,0,length);
		System.out.println("IP地址:"+ip+ "数据是"+ dataStr);
		//5,释放流资源
		receiveSocket.close();
	}
}

标签: none