UDP通信

接收端不需要明确知道数据的来源,只需要接收到数据即可

发送数据时必须指定接收端的IP地址和端口号,就好像发送货物的集装箱上面必须标明接收人的地址一样

* 发送端

 * 1,创建DatagramPacket对象,封装数据,接收的地址和端口

 * 2,创建DatagramSocket对象

* 3,调用DatagramSocket中的send方法,发送数据包

 * 4,关闭资源DatagramSocket

package com.oracle.demo01;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.security.spec.DSAGenParameterSpec;
import java.util.Scanner;

public class UDPSend {

	public static void main(String[] args) throws IOException {
		Scanner sc=new Scanner(System.in);
		//封装ip地址
		InetAddress inet=InetAddress.getByName("127.0.0.1");
		//创建快递公司对象
		DatagramSocket ds=new DatagramSocket();
		while (true) {
			
		//创建打包对象,封装要发送的数据、接收端的ip地址极端口号
		//封装数据
		
		byte[]bytes=sc.next().getBytes();
		
		DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inet,8888);
		
		//发送数据
		ds.send(dp);
		//释放资源
		//ds.close();

	}
	}
}

  

UDP接收端

 *

 * 1,创建DatagramSocket对象,绑定端口号(要和发送端端口号一致)

 * 2,创建字节数组,接收发来的数据

 * 3,创建数据包对象DatagramPacket

 * 4,调用DatagramSocket对象方法receive(DatagramPacket dp)接收数据,数据放在数据包中

 * 5,拆包

      发送的IP地址

          数据包对象DatagramPacket方法getAddress()获取的是发送端的IP地址对象

          返回值是InetAddress对象

      接收到的字节个数

          数据包对象DatagramPacket方法getLength()

      发送方的端口号

          数据包对象DatagramPacket方法getPort()发送端口

 * 6,关闭资源

package com.oracle.demo01;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UDPRecieve {
	// UDP接收端
	public static void main(String[] args) throws IOException {
		// 创建快递公司,名确端口号
		DatagramSocket ds = new DatagramSocket(8888);
		// 创建字节数组来接收数据
		byte bytes[] = new byte[1024];
		
		while (true) {
			// 创建打包对象,接收包
			DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
			// 接收数据包
			ds.receive(dp);
			// 拆包
			// 获取字节长度
			int length = dp.getLength();
			// 获取发送端ip地址
			String ip = dp.getAddress().getHostAddress();
			// 获取端口号
			int port = dp.getPort();
			System.out.println("ip地址为:" + ip + "	端口号为" + port + "	得人发送的内容为" + new String(bytes, 0, length));
			// 释放资源
			// ds.close();
		}
	}

}

  

原文地址:https://www.cnblogs.com/zqy6666/p/12325012.html