Java TCP客户端示例
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try (
Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))
) {
out.println("Hello TCP Server!");
String response = in.readLine();
System.out.println("Server response: " + response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java UDP客户端示例
import java.net.*;
public class UDPClient {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket()) {
String message = "Hello UDP Server!";
byte[] buffer = message.getBytes();
InetAddress address = InetAddress.getByName("localhost");
int port = 54321;
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
socket.send(packet);
byte[] receiveBuffer = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
socket.receive(receivePacket);
System.out.println("Server response: " + new String(receivePacket.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
TCP与UDP对比表格
特性 | TCP | UDP |
---|
连接方式 | 面向连接(三次握手) | 无连接 |
可靠性 | 可靠(数据不丢失/重复/乱序) | 不可靠(可能丢失/重复/乱序) |
顺序保证 | 保证数据顺序 | 不保证 |
速度 | 较慢(握手/流量控制开销) | 快(无连接管理开销) |
头部大小 | 20-60字节 | 8字节 |
流量控制 | 有(自动调整发送速率) | 无 |
延迟 | 较高(需确认机制) | 低 |
应用场景 | 文件传输、HTTP/HTTPS、Email | 视频通话、在线游戏、实时监控 |
关键差异总结
场景 | TCP推荐 | UDP推荐 |
---|
数据完整性要求高 | ✔️(如文件下载) | ❌(可能丢失数据) |
实时性要求高 | ❌(延迟较高) | ✔️(如游戏心跳包) |
大量小数据包 | ❌(开销大) | ✔️(如传感器数据上报) |
需要端到端控制 | ✔️(重传/拥塞控制) | ❌(需自行实现) |