发送端
/*** 发送端*/// 1、创建发送端对象:发送端自带默认的端口号(人),port可以指定,也可以不指定DatagramSocket socket = new DatagramSocket(6666);// 2、创建一个数据包对象封装数据(韭菜盘子)/*** @param buf the packet data.封装要发送的数据* @param length the packet data length.发送数据的大小* @param address the destination address.接受端的IP地址* @param port the destination port number.接受端的端口号*/byte[] buffer = "封装要发送的数据".getBytes();InetAddress ip = InetAddress.getLocalHost();int port = 8888;DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip,port);// 3、发送数据出去socket.send(packet);
接受端
/*** 接受端*/System.out.println("=====接受端启动=====");// 1、创建接受端对象,注册端口(人)int port = 8888;DatagramSocket socket = new DatagramSocket(port);// 2、创建一个数据包对象接收数据(韭菜盘子)byte[] buffer = new byte[1024*64];DatagramPacket packet = new DatagramPacket(buffer,buffer.length);// 3、等待接受数据即可socket.receive(packet);// 4、取出数据即可String rs = new String(buffer);int len = packet.getLength();// 发多少,接受多少String rs = new String(buffer,0,len);System.out.println("rs = " + rs);// 5.获取发送端的IP和端口String ip = packet.getAddress().toString();int port1 = packet.getPort();System.out.println("发送端IP:"+ip);System.out.println("发送端端口:"+port1);socket.close();//关闭资源
循环接受循环发送
/*** 发送端*/// 1、创建发送端对象:发送端自带默认的端口号(人),port可以指定,也可以不指定DatagramSocket socket = new DatagramSocket(6666);// 2、创建一个数据包对象封装数据(韭菜盘子)Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");String msg = sc.nextLine();//输入if ("exit".equals(msg)) {System.out.println("离线成功");socket.close();//释放资源break;}byte[] buffer = msg.getBytes();InetAddress ip = InetAddress.getLocalHost();int port = 8888;DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);// 3、发送数据出去socket.send(packet);}
/*** 接受端*/System.out.println("=====接受端启动,循环接受=====");// 1、创建接受端对象,注册端口(人)int port = 8888;DatagramSocket socket = new DatagramSocket(port);// 2、创建一个数据包对象接收数据(韭菜盘子)byte[] buffer = new byte[1024*64];DatagramPacket packet = new DatagramPacket(buffer,buffer.length);while (true) {// 3、等待接受数据即可socket.receive(packet);// 4、取出数据即可byte[] data = packet.getData();int len = packet.getLength();// 发多少,接受多少String rs = new String(data,0,len);// 5.获取发送端的IP和端口String ip = packet.getAddress().toString();int port1 = packet.getPort();System.out.println("发送端IP:"+ip);System.out.println("发送端端口:"+port1);System.out.println("消息内容:"+rs);}
UDP如何实现广播
使用广播地址:255.255.255.255
具体操作:
- 发送端发送的数据的目的地写的是广播地址,且指定端口。(2555.255.255.255,9999)
- 本机所在的网段的其他主机的程序只要匹配端口成功,就可以收到消息了,(9999)
- 接受端要使用同一个端口号,比如9999 ```java /**
- 发送端 */
// 1、创建发送端对象:发送端自带默认的端口号(人),port可以指定,也可以不指定 DatagramSocket socket = new DatagramSocket(6666);
// 2、创建一个数据包对象封装数据(韭菜盘子)
Scanner sc = new Scanner(System.in); while (true) { System.out.println(“请说:”); String msg = sc.nextLine();//输入 if (“exit”.equals(msg)) { System.out.println(“离线成功”); socket.close();//释放资源 break; } byte[] buffer = msg.getBytes(); //定义广播地址 InetAddress ip = InetAddress.getByName(“255.255.255.255”); int port = 9999; DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);
// 3、发送数据出去 socket.send(packet); }
```java/*** 接受端*/System.out.println("=====接受端启动,循环接受=====");// 1、创建接受端对象,注册端口(人)int port = 9999;DatagramSocket socket = new DatagramSocket(port);// 2、创建一个数据包对象接收数据(韭菜盘子)byte[] buffer = new byte[1024*64];DatagramPacket packet = new DatagramPacket(buffer,buffer.length);while (true) {// 3、等待接受数据即可socket.receive(packet);// 4、取出数据即可byte[] data = packet.getData();int len = packet.getLength();// 发多少,接受多少String rs = new String(data,0,len);// 5.获取发送端的IP和端口String ip = packet.getAddress().toString();int port1 = packet.getPort();System.out.println("发送端IP:"+ip);System.out.println("发送端端口:"+port1);System.out.println("消息内容:"+rs);}
UDP如何实现组播
使用组播地址:224.0.0.0~239.255.255.255
具体操作:
- 发送端的数据包的目的地是组播IP(例如:224.0.1.1,端口:9999)
- 接收端必须绑定该组播IP(224.0.1.1),端口还要对应发送端的目的端口9999,这样即可接受该组播消息。
DatagramSocket的子类MulticastSocket可以在接收端绑定组播IP
/*** 发送端*/// 1、创建发送端对象:发送端自带默认的端口号(人),port可以指定,也可以不指定DatagramSocket socket = new DatagramSocket(6666);// 2、创建一个数据包对象封装数据(韭菜盘子)Scanner sc = new Scanner(System.in);while (true) {System.out.println("请说:");String msg = sc.nextLine();//输入if ("exit".equals(msg)) {System.out.println("离线成功");socket.close();//释放资源break;}byte[] buffer = msg.getBytes();//定义组播地址InetAddress ip = InetAddress.getByName("224.0.1.1");int port = 9999;DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, port);// 3、发送数据出去socket.send(packet);}
/*** 接受端*/System.out.println("=====接受端启动,循环接受=====");// 1、创建接受端对象,注册端口(人)int port = 9999;MulticastSocket socket = new MulticastSocket(port);//绑定组播地址(JDK14以后就过时了)InetAddress ip1 = InetAddress.getByName("224.0.1.1");socket.joinGroup(ip1);//绑定组播地址(不过时的)// InetSocketAddress ip2 = new InetSocketAddress(InetAddress.getByName("224.0.1.1"),9999);// NetworkInterface localIP = NetworkInterface.getByInetAddress(InetAddress.getLocalHost());// socket.joinGroup(ip2,localIP);// 2、创建一个数据包对象接收数据(韭菜盘子)byte[] buffer = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);while (true) {// 3、等待接受数据即可socket.receive(packet);// 4、取出数据即可byte[] data = packet.getData();int len = packet.getLength();// 发多少,接受多少String rs = new String(data, 0, len);// 5.获取发送端的IP和端口String ip = packet.getAddress().toString();int port1 = packet.getPort();System.out.println("发送端IP:" + ip);System.out.println("发送端端口:" + port1);System.out.println("消息内容:" + rs);}
