以下是Java Socket网络编程的核心知识点梳理,结合应用场景及常见问题总结:
类名 | 用途 |
---|---|
ServerSocket | TCP服务端监听指定端口,等待客户端连接 |
Socket | TCP客户端与服务端通信的端点,支持输入/输出流操作 |
DatagramSocket | UDP通信端点,通过数据报(DatagramPacket)传输数据 |
InetAddress | 封装IP地址,支持通过主机名获取IP(如InetAddress.getByName("localhost") ) |
ServerSocket server = new ServerSocket(8888); // 绑定端口
while (true) {
Socket client = server.accept(); // 阻塞等待客户端连接
new Thread(() -> handleClient(client)).start(); // 多线程处理[2]()
}
void handleClient(Socket client) {
try (InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream()) {
// 读取数据并处理
}
}
Socket socket = new Socket("127.0.0.1", 8888); // 连接服务端
OutputStream out = socket.getOutputStream();
out.write("Hello".getBytes());
DatagramSocket socket = new DatagramSocket(9999); // 绑定端口
byte[] buffer = new byte[1024]();
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet); // 接收数据报
String msg = new String(packet.getData(), 0, packet.getLength());
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket sendPacket = new DatagramPacket(
"Data".getBytes(), "Data".length(), address, 9999);
socket.send(sendPacket);
场景 | 适用协议 | 特点 |
---|---|---|
文件传输、网页访问 | TCP | 数据完整性要求高,需稳定连接 |
实时视频、在线游戏 | UDP | 容忍部分数据丢失,追求低延迟 |
扩展建议:若需深入TCP粘包/拆包处理或NIO进阶用法,可参考中的Socket参数详解及中的多线程优化实践。