javaSE UDP, DatagramSocket套接字, DatagramPacket数据报


UDPSend.java(发送端):

package cn.xxx.demo;

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

public class UDPSend {
	public static void main(String[] args) throws IOException{
		byte[] date = "你好UDP".getBytes();  // 要发送数据的字节数组。 UDP传输数据不能超过64KB
		//创建InetAddress对象,封装自己的IP地址
		InetAddress inet = InetAddress.getByName("127.0.0.1");
		DatagramPacket dp = new DatagramPacket(date, date.length, inet, 6000); // 发送端必须指定自己的IP地址和接收端端口 
		
		DatagramSocket ds = new DatagramSocket(); // 创建数据传输对象(套接字)。 空参构造器会随机分配一个可用的端口号(一般不关心该端口号)。
		ds.send(dp);  // 发送数据报对象
		
		ds.close();  //关闭资源
	}
}
UDPReceive.java(接收端):
package cn.xxx.demo;

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

public class UDPReceive {
	public static void main(String[] args)throws IOException {
		//创建数据传输对象(套接字)DatagramSocket 接收端必须绑定端口号
		DatagramSocket ds = new DatagramSocket(6000);  // 接收端必须绑定端口号;要和发送端的数据报中指定的端口号保持一致 

		byte[] data = new byte[1024];
		DatagramPacket dp = new DatagramPacket(data, data.length); // 创建数据报对象。
		ds.receive(dp);  // 接收数据到数据报对象中。 数据存到数据报中的字节数组中。  会阻塞线程,一直等待接收到数据为止。
		
		// 拆包
		String ip=dp.getAddress().getHostAddress(); //获取发送端的IP地址对象
		int port = dp.getPort();  //获取发送端的端口号(一般不关心发送端端口号)
		int length = dp.getLength();  //获取接收到的字节个数
		System.out.println(new String(data,0,length)+"..."+ip+":"+port);
		ds.close();  // 关闭资源
	}
}


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80791561
今日推荐