Java 网络通信零基础详解:Socket、TCP、UDP 实战
一、前言
网络编程是 Java 开发中非常核心的能力,几乎所有服务端、中间件、即时通信、微服务底层数据交互,都离不开网络通信。
很多初学者对网络编程的印象就是: Socket 、端口、IP。但实际开发中,我们必须搞懂:
- TCP 和 UDP 的本质区别
- 阻塞 IO 的通信流程
- 服务端与客户端数据交互方式
本文用通俗易懂 + 可直接运行代码的方式,带你彻底吃透 Java 基础网络通信。
二、网络通信核心概念
1. 通信三要素
- IP 地址:定位网络中的设备
- 端口号:定位设备中的某一个程序(0~65535)
- 协议:数据传输的规则(TCP / UDP)
2. 两种核心协议对比
TCP(传输控制协议)
- 面向连接:必须先建立连接,再通信
- 可靠、不丢包、有序
- 三次握手、四次挥手
- 速度稍慢
适用场景:文件传输、聊天消息、接口请求、数据不能丢失的场景。
UDP(用户数据报协议)
- 无连接:直接发数据,不用建立连接
- 不可靠、可能丢包、乱序
- 速度极快
适用场景:直播、游戏、视频通话、实时性优先场景。
三、Java 网络编程核心类
Java 针对两种协议提供了两套原生 API:
TCP 编程核心类(流式通信)
- ServerSocket :服务端,监听端口、等待客户端连接
- Socket :客户端 / 服务端通信通道,负责收发数据流
UDP 编程核心类(数据报通信)
- DatagramSocket :收发数据包的套接字
- DatagramPacket :数据包(封装数据、地址、端口)
四、TCP 通信完整实战(最常用)
TCP 是一对一、长连接、流式读写,是工作中最常见的网络通信方式。
1. TCP 服务端代码
2. TCP 客户端代码
3. 运行流程
1. 先启动服务端,阻塞等待连接
2. 启动客户端,主动建立 TCP 连接
3. 客户端发送字节流数据
4. 服务端读取并打印消息
5. 双方关闭连接
五、UDP 通信完整实战
UDP 无连接、面向数据包,不需要先建立连接,直接发包。
1. UDP 服务端(接收数据)
2. UDP 客户端(发送数据)
六、TCP 与 UDP 核心区别总结(面试必背)
1. 连接方式
- TCP:面向连接(三次握手)
- UDP:无连接
2. 可靠性
- TCP:可靠,无丢失、无乱序
- UDP:不可靠,可能丢包、乱序
3. 速度
- TCP:较慢
- UDP:极快
4. 通信方式
- TCP:流式 IO
- UDP:数据包收发
5. 适用场景
- TCP:文件上传下载、接口通信、聊天
- UDP:直播、音视频、游戏实时帧
七、新手常见问题
1. 为什么 ServerSocket 会阻塞?
accept() 方法是阻塞方法,没有客户端连接时程序会一直等待,避免空轮询消耗 CPU。
2. TCP 为什么需要 IO 流?
TCP 是流式传输,没有数据边界,通过 IO 流持续读写数据。
3. UDP 为什么可能丢包?
UDP 不做重传、不做确认,网络拥堵时数据包会直接被丢弃。
八、总结
1. Java 基础网络通信分为 TCP 流式通信 和 UDP 数据报通信
2. TCP 稳定可靠,是业务开发主流;UDP 高性能,用于实时场景
3. ServerSocket/Socket 实现 TCP, DatagramSocket 实现 UDP
4. 所有分布式、RPC、NIO、Netty 框架,底层都是基于这两套模型的升级
后续进阶方向:BIO 阻塞模型缺点、NIO 非阻塞、Selector 多路复用、Netty 框架源码。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)