代码咖啡因的个人博客 代码咖啡因的个人博客

记录精彩的程序人生

目录
Java Socket网络编程的核心知识点
/    

Java Socket网络编程的核心知识点

以下是Java Socket网络编程的核心知识点梳理,结合应用场景及常见问题总结:


一、基础概念

  1. Socket定义
    • 用于不同主机或进程间的双向通信端点,基于TCP/UDP协议实现。
    • TCP:面向连接,保证数据可靠传输(如文件传输、HTTP请求)。
    • UDP:无连接,强调传输效率(如视频流、实时消息)。
  2. 核心要素
    • IP地址:标识网络中的设备(通过InetAddress类操作)。
    • 端口号:区分同一主机上的不同应用程序(0-65535)。
    • 协议:规定通信规则(如HTTP默认端口80)。

二、核心类与API

类名用途
ServerSocketTCP服务端监听指定端口,等待客户端连接
SocketTCP客户端与服务端通信的端点,支持输入/输出流操作
DatagramSocketUDP通信端点,通过数据报(DatagramPacket)传输数据
InetAddress封装IP地址,支持通过主机名获取IP(如InetAddress.getByName("localhost") )

三、TCP编程实现

1. 服务端步骤

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())  {
        // 读取数据并处理 
    }
}

2. 客户端步骤

Socket socket = new Socket("127.0.0.1", 8888);  // 连接服务端
OutputStream out = socket.getOutputStream(); 
out.write("Hello".getBytes()); 

3. 关键问题

  • 消息结束标识:需约定结束符(如END)或通过shutdownOutput()关闭输出流。
  • 资源释放:优先关闭Socket而非单独关闭流,避免连接残留。

四、UDP编程实现

1. 服务端/客户端通用流程

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()); 

2. 发送数据示例

InetAddress address = InetAddress.getByName("localhost"); 
DatagramPacket sendPacket = new DatagramPacket(
    "Data".getBytes(), "Data".length(), address, 9999);
socket.send(sendPacket); 

五、常见问题与优化

  1. 多线程优化
    • 服务端使用线程池处理请求,避免频繁创建线程。
    • 设置线程优先级(如thread.setPriority(4) )平衡性能。
  2. 参数调优
    • SO_TIMEOUT:设置等待超时时间。
    • SO_REUSEADDR:允许端口复用,解决重启时地址占用问题。
  3. 性能瓶颈
    • 高并发场景建议使用NIO(非阻塞IO)替代传统Socket。

六、应用场景对比

场景适用协议特点
文件传输、网页访问TCP数据完整性要求高,需稳定连接
实时视频、在线游戏UDP容忍部分数据丢失,追求低延迟

扩展建议:若需深入TCP粘包/拆包处理或NIO进阶用法,可参考中的Socket参数详解及中的多线程优化实践。