UDP网络编程概述:
UDP网络编程:是一个无连接的传输层协议、提供面向事务的简单不可靠的学习传送服务,类似于短信
UDP协议是面向数据报文的学习传送服务
UDP在发送端没有缓冲区
send() 发送
receive() 接收
UDP协议没有拥塞控制,不会保证UDP报文的到达顺序和发送顺序一致 常用于视频通话、直播等应用 —— 不安全
一次只能最大发送64Kb的数据
相关API
DatagramSocket
:客户端/服务端
DatagramPacket
:数据包
双向通信
客户端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Client {
public static void main(String[] args) throws Exception {
DatagramSocket clientSocket = new DatagramSocket();
byte[] sendData;
byte[] receiveData = new byte[1024];
String sentence = "Hello, Server!";
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getLocalHost(), 9999);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("从服务器接收到的数据:" + modifiedSentence);
clientSocket.close();
}
}
服务端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Server {
public static void main(String[] args) throws Exception {
DatagramSocket serverSocket = new DatagramSocket(9999);
byte[] receiveData = new byte[1024];
byte[] sendData;
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
System.out.println("客户端发送的数据:" + sentence);
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getLocalHost(), receivePacket.getPort());
serverSocket.send(sendPacket);
}
}
}