Java TCP客户端示例
java
复制代码
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客户端示例
java
复制代码
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推荐 |
数据完整性要求高 |
✔️(如文件下载) |
❌(可能丢失数据) |
实时性要求高 |
❌(延迟较高) |
✔️(如游戏心跳包) |
大量小数据包 |
❌(开销大) |
✔️(如传感器数据上报) |
需要端到端控制 |
✔️(重传/拥塞控制) |
❌(需自行实现) |