在java中,实现UDP 的连接步骤和实现TCP连接的步骤相似,建立socket连接,然后传输数据。
使用UDP进行连接的服务器端,通过DatagramSocket获取UDP连接,通过DatagramPacket获取到用户数据报,发送数据,则把数据封装成一个DatagramPacket对象并指定目的地址和其端口号——
public class UDP_Server {
public static void main(String[] args) throws IOException {
//创建服务器端socket并制定端口
DatagramSocket socket = new DatagramSocket(8800);
byte [] data = new byte[1024];
//创建一个packet来接受收到的UDP包
DatagramPacket packet = new DatagramPacket(data, data.length);
System.out.println("************服务器端已启动*************");
//在socket receive到包之前,会一直处于阻塞状态
socket.receive(packet);
String info = new String(data, 0, packet.getLength());
System.out.println("我是服务器,客户端说:"+info);
//给客户端回应
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte [] data2 = "欢迎您!".getBytes();
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
socket.send(packet2);//用socket发送过去。
socket.close();//关闭资源
}
}
使用UDP的客户端通过这种形式可以发送/接受用户数据报——
public class UDP_Client {
public static void main(String[] args) throws IOException {
//定义服务器的地址和端口
InetAddress address = InetAddress.getByName("localhost");
int port = 8800;
byte [] data = "用户名:admin , 密码:123456".getBytes();
//创建一个UDP包将其包装起来发送到指定主机
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
//接收服务器端响应的数据
//创建数据包用来接收
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2, data.length);
//接收
socket.receive(packet2);
String reply = new String(data2, 0, packet2.getLength());
System.out.println("我是客户端,服务器说:"+reply);
//关闭资源
socket.close();
}
}
这里总结一下,就是:1、把数据封装成DatagramPacket包,再通过socket来send出去。2、通过socket的receive()接收到数据包(同TCP的accept()类似,在收到消息之前线程会处于阻塞状态),再把数据包内容解析出来~
下图分别为双方收到的消息: