UDP通信的含义
UDP(User Datagram Protocol)是一种无连接的传输层协议,提供不可靠的数据传输服务。UDP不建立连接,直接发送数据包,不保证数据包的顺序、完整性或到达性。它适用于对实时性要求高但允许少量数据丢失的场景,如视频流、在线游戏等。
TCP通信的含义
TCP(Transmission Control Protocol)是一种面向连接的传输层协议,提供可靠的数据传输服务。TCP通过三次握手建立连接,确保数据包的顺序、完整性和重传机制。它适用于对数据准确性要求高的场景,如网页浏览、文件传输等。
UDP与TCP的区别
连接方式
UDP是无连接的,直接发送数据包;TCP是面向连接的,需先建立连接。
可靠性
UDP不保证数据包的到达或顺序;TCP通过确认、重传和排序机制确保可靠性。
传输效率
UDP开销小,传输速度快;TCP因建立连接和确认机制,开销较大。
适用场景
UDP适合实时应用(如直播、游戏);TCP适合需要可靠传输的应用(如HTTP、FTP)。
记忆小结
- UDP:无连接、不可靠、速度快。记住“快速但可能丢包”,类似寄明信片。
- TCP:有连接、可靠、速度慢。记住“可靠但稍慢”,类似打电话确认。
Java代码示例
UDP通信示例
发送端
import java.net.*;
public class UDPSender {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();
String message = "Hello UDP";
byte[] data = message.getBytes();
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(data, data.length, address, 9876);
socket.send(packet);
socket.close();
}
}
接收端
import java.net.*;
public class UDPReceiver {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(9876);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Received: " + received);
socket.close();
}
}
TCP通信示例
客户端
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 1234);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello TCP");
socket.close();
}
}
服务端
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(1234);
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String message = in.readLine();
System.out.println("Received: " + message);
clientSocket.close();
serverSocket.close();
}
}
代码对比说明
- UDP:直接发送数据包,无需建立连接,代码中使用
DatagramSocket
和DatagramPacket
。 - TCP:需先建立连接,代码中使用
Socket
和ServerSocket
,通过流传输数据。
通过代码示例可以直观感受两者的差异:UDP简单直接,TCP复杂但可靠。