UDP通信:
特点:无连接、不可靠通信。
不事先建立连接:发送端每次要把发送的数据(限制在64KB内),接收端IP、等信息封装在一个数据包中,发出去就不管了。
Java提供了一个java.net.DatagramSocket类来实现UDP通信。
Client客户端程序:
package cn.chang.d2_udp1;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 目标;完成UDP通信快速入门,实现1发1收。
*/
public class Client {
public static void main(String[] args) throws Exception {
// 1. 创建客户端对象(发韭菜出去的人)
DatagramSocket socket = new DatagramSocket();
// 2. 创建数据包对象封装要发出去的数据(创建一个韭菜盘子)
// public DatagramPacket(byte buf[], int length,
// InetAddress address, int port)
// 参数1: 封装要发出去的数据
// 参数2: 发送出去的数据大小(字节个数)
// 参数3: 服务端的IP地址(找到服务器主机)
// 参数4: 服务端程序的端口
//
byte[] bytes = "我是快乐的客户端,我爱你ABC。".getBytes();
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 6666);
// 3. 开始正式发送这个数据包的数据出去了。
socket.send(packet);
System.out.println("客户端数据发送完毕~~");
socket.close(); // 释放资源
}
}
Server服务端代码:
package cn.chang.d2_udp1;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/**
* 目标: 完成UDP通信快速入门-服务端开发
*/
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("===正式启动服务端===");
// 1. 创建一个服务端对象,创建一个接韭菜的人
DatagramSocket socket = new DatagramSocket(6666);
// 2. 创建一个数据报对象,用于接收数据
byte[] buffer = new byte[1024 * 64]; // 64KB
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
// 3. 正式使用数据包接收客户端发送来的数据
socket.receive(packet);
// 4. 从字节数组中,把接收到的数据直接打印出来。
// 接受多少就倒出多少
// 获取本次数据包接收了多少数据
int len = packet.getLength();
String res = new String(buffer, 0, len);
System.out.println(res);
System.out.println(packet.getAddress().getHostAddress()); // 拿到客户端的IP地址
System.out.println(packet.getPort()); // 拿到客户端的端口
socket.close();
}
}
先运行服务端,然后再运行客户端。
运行结果:
服务端: