文章目录

  • 1. UDP发送数据
  • 2. UDP接收数据【应用】
  • 3. UDP通信程序练习【应用】
  • 4. UDP三种通讯方式


1. UDP发送数据

  • Java中的UDP通信
  • UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个
    Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客
    户端和服务器的概念
  • Java提供了DatagramSocket类作为基于UDP协议的Socket
  • 构造方法
  • java recvfrom sendto udp编程 java发送udp_udp

  • 相关方法
  • java recvfrom sendto udp编程 java发送udp_java_02

  • 发送数据的步骤
    - 创建发送端的Socket对象(DatagramSocket)
    - 创建数据,并把数据打包
    - 调用DatagramSocket对象的方法发送数据
    - 关闭发送端
  • 代码演示
public class SendDemo {
	public static void main(String[] args) throws IOException {
		//创建发送端的Socket对象(DatagramSocket)
		// DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口
		DatagramSocket ds = new DatagramSocket();
		//创建数据,并把数据打包
		//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
		//构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
		byte[] bys = "hello,udp,我来了".getBytes();
		DatagramPacket dp = new
		DatagramPacket(bys,bys.length,InetAddress.getByName("127.0.0.1"),10086);
		//调用DatagramSocket对象的方法发送数据
		//void send(DatagramPacket p) 从此套接字发送数据报包
		ds.send(dp);
		//关闭发送端
		//void close() 关闭此数据报套接字
		ds.close();
	}
}


2. UDP接收数据【应用】

  • 接收数据的步骤
  • 创建接收端的Socket对象(DatagramSocket)
  • 创建一个数据包,用于接收数据
  • 调用DatagramSocket对象的方法接收数据
  • 解析数据包,并把数据在控制台显示
  • 关闭接收端
  • 构造方法
  • java recvfrom sendto udp编程 java发送udp_UDP_03

  • 相关方法
  • java recvfrom sendto udp编程 java发送udp_udp_04

  • 示例代码
public class ReceiveDemo {
	public static void main(String[] args) throws IOException {
		//创建接收端的Socket对象(DatagramSocket)
		DatagramSocket ds = new DatagramSocket(12345);
		//创建一个数据包,用于接收数据
		byte[] bys = new byte[1024];
		DatagramPacket dp = new DatagramPacket(bys, bys.length);
		//调用DatagramSocket对象的方法接收数据
		ds.receive(dp);
		//解析数据包,并把数据在控制台显示
		System.out.println("数据是:" + new String(dp.getData(), 0,
		dp.getLength()));
		}
	}
}


3. UDP通信程序练习【应用】

  • 案例需求
  • UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束
  • UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收
  • 代码实现
/*
	UDP发送数据:
	数据来自于键盘录入,直到输入的数据是886,发送数据结束
*/
public class SendDemo {
	public static void main(String[] args) throws IOException {
		//创建发送端的Socket对象(DatagramSocket)
		DatagramSocket ds = new DatagramSocket();
		//键盘录入数据
		Scanner sc = new Scanner(System.in);
		while (true) {
			String s = sc.nextLine();
			//输入的数据是886,发送数据结束
			if ("886".equals(s)) {
				break;
			}
			//创建数据,并把数据打包
			byte[] bys = s.getBytes();
			DatagramPacket dp = new DatagramPacket(bys, bys.length,
			InetAddress.getByName("192.168.1.66"), 12345);
			//调用DatagramSocket对象的方法发送数据
			ds.send(dp);
		}
		//关闭发送端
		ds.close();
	}
}
/*
	UDP接收数据:
	因为接收端不知道发送端什么时候停止发送,故采用死循环接收
*/
public class ReceiveDemo {
	public static void main(String[] args) throws IOException {
		//创建接收端的Socket对象(DatagramSocket)
		DatagramSocket ds = new DatagramSocket(12345);
		while (true) {
			//创建一个数据包,用于接收数据
			byte[] bys = new byte[1024];
			DatagramPacket dp = new DatagramPacket(bys, bys.length);
			//调用DatagramSocket对象的方法接收数据
			ds.receive(dp);
			//解析数据包,并把数据在控制台显示
			System.out.println("数据是:" + new String(dp.getData(), 0,
			dp.getLength()));
		}
		//关闭接收端
		// ds.close();
	}
}


4. UDP三种通讯方式

  • 单播
    单播用于两个主机之间的端对端通信
  • 组播
    组播用于对一组特定的主机进行通信
  • 广播
    广播用于一个主机对整个局域网上所有主机上的数据通信

java recvfrom sendto udp编程 java发送udp_udp_05