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