作者:杨振林
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
不加密情况下使用UDP传输的过程如下。
接收方先运行等待发送方的数据。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class DatagramReciver {
private static String ip="127.0.0.1";
private static int reciveport=15000;
public static void main(String args[]) throws Exception {
// 1.创建要用来接收的本地地址对象
SocketAddress localAddr = new InetSocketAddress(ip, reciveport);
// 2.接收的服务器UDP端口
DatagramSocket recvSocket = new DatagramSocket(localAddr);
while (true) {
// 3.指定接收缓冲区大小
byte[] buffer = new byte[20];
// 4.创建接收数据包对象,指定接收大小
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
// 5.阻塞等待数据到来,如果收到数据,存入packet中的缓冲区中
System.out.println("UDP服务器等待接收数据:"
+ recvSocket.getLocalSocketAddress());
recvSocket.receive(packet);
// 得到发送方的IP和端口
SocketAddress address = packet.getSocketAddress();
// 转换接收到的数据为字符串
String msg = new String(packet.getData()).trim();
// 接收到后,打印出收到的数据长度
System.out.println("recv is:" + msg + " from:" + address);
}
}
}
发送方发送数据
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class DatagramSender {
private static String ip="127.0.0.1";
private static int sendport =13000;
private static int reciveport=15000;
public static void main(String args[]) throws Exception {
// 1.创建要用来发送的本地地址对象
SocketAddress localAddr = new InetSocketAddress(ip, sendport);
// 2.创建发送的Socket对象
DatagramSocket dSender = new DatagramSocket(localAddr);
int count = 0;
while (true) {
// 创建要发送的数据,字节数组
count++;
// 3.要发送的数据
byte buffer[] = (count + "-hello").getBytes();
// 4.发送数据的目标地址和端口
SocketAddress destAdd = new InetSocketAddress(ip,
reciveport);
// 5.创建要发送的数据包,指定内容,指定目标地址
DatagramPacket dp = new DatagramPacket(buffer, buffer.length,
destAdd);
dSender.send(dp);// 6.发送
System.out.println("数据已发送: " + count);
Thread.sleep(1000);
}
}
}
不加密情况下,我们传输的数据是暴露给外界的,使用Wireshark等抓包