1、相对于TCP协议,UDP协议减少了建立通信的阶段,所以说,UDP的数据发送不是可靠的
package com.test.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class UDPServerTest {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DatagramSocket server = null;
try {
// 通过5050端口建立UDP服务端
server = new DatagramSocket(5050);
System.out.println(sdf.format(new Date()) + " UDP服务监听启动!");
// 设置接收数据的缓冲区大小
byte[] recvBuf = new byte[100];
// 建立存放数据的数据报
DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length);
while (true) {
// 建立服务端数据监听,此处阻塞
server.receive(recvPacket);
// 接收到数据后,取出数据
String recvStr = new String(recvPacket.getData(), 0, recvPacket.getLength());
System.out.println(sdf.format(new Date()) + " 从UDP客户端接收到消息:" + recvStr);
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
server.close();
}
}
}
package com.test.udp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
public class UDPClientTest {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DatagramSocket client = null;
try {
client = new DatagramSocket();
BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
// 从系统标准输入读入一字符串
String readline = brIn.readLine();
// 若从标准输入读入的字符串为 "bye"则停止循环
while (!readline.equals("bye")) {
byte[] sendBuf = readline.getBytes();
InetAddress addr = InetAddress.getByName("127.0.0.1");
int port = 5050;
DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port);
client.send(sendPacket);
System.out.println(sdf.format(new Date()) + " 向UDP服务端发送消息:" + readline);
System.out.println();
System.out.print("请输入需要发送给UDP服务端的消息:");
readline = brIn.readLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
client.close();
}
}
}