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

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


一、基础概念

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

二、核心类与 API

类名 用途
ServerSocket TCP 服务端监听指定端口,等待客户端连接
Socket TCP 客户端与服务端通信的端点,支持输入/输出流操作
DatagramSocket UDP 通信端点,通过数据报(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 参数详解及中的多线程优化实践。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3198 引用 • 8215 回帖 • 1 关注
  • Socket
    21 引用 • 23 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...