云计算百科
云计算领域专业知识百科平台

Java 网络编程全套教程:UDP/TCP Socket 通信、三次握手四次挥手、协议分层全梳理

一、网络编程基础概述

1. 什么是网络编程

在网络通信协议下,不同计算机上运行的程序进行数据传输,就是网络编程。Java 通过java.net包下的 API 实现网络通信,常见应用场景:即时通信、网游、邮件、文件传输等。

2. 两种主流软件架构

架构全称特点
C/S 架构 Client/Server 客户端 / 服务器 用户需安装客户端,体验定制化强,开发维护成本高
B/S 架构 Browser/Server 浏览器 / 服务器 无需安装客户端,通过浏览器访问,维护成本低,体验受浏览器限制

二、网络编程三要素(核心基础)

数据在网络中精准传输,必须满足三个核心条件:IP 地址、端口号、通信协议。

1. IP 地址:设备在网络中的唯一标识

IPv4 与 IPv6
  • IPv4:32 位地址,总数约 42 亿,目前已耗尽;通过局域网 IP 复用缓解地址不足
  • IPv6:128 位地址,总数 2^128,彻底解决地址不足问题
特殊 IP 与常用命令
  • 本机回环地址:127.0.0.1 / localhost,永远指向当前设备本机
  • CMD 常用命令:
    • ipconfig:查看本机 IP 地址
    • ping IP:检查与目标地址网络是否连通
Java IP 操作类:InetAddress

// 获取本机IP对象
InetAddress address = InetAddress.getByName("DESKTOP-5033SAM");
// 获取主机名
String name = address.getHostName();
// 获取IP地址字符串
String ip = address.getHostAddress();

2. 端口号:应用程序在设备中的唯一标识

  • 取值范围:0~65535(两个字节表示的整数)
  • 0~1023:预留给知名网络服务(如 HTTP 80、HTTPS 443)
  • 自定义程序推荐使用 1024 以上的端口
  • 核心规则:一个端口同一时间只能被一个程序占用

3. 通信协议:数据传输的规则

OSI 七层模型 vs TCP/IP 四层模型
OSI 七层参考模型TCP/IP 四层模型常见协议开发关注层
应用层 应用层 HTTP、FTP、DNS 程序员主要关注
表示层
会话层
传输层 传输层 TCP、UDP 选择传输协议
网络层 网络层 IP、ICMP、ARP 封装 IP 地址
数据链路层 物理 + 数据链路层 硬件设备 转成二进制传输
物理层

三、UDP 通信编程

1. UDP 协议核心特点

  • 无连接:发送前不建立连接,直接发数据包
  • 不可靠:不保证数据一定送达,丢包不重传
  • 速度快、开销小:适合直播、在线视频、语音通话等对实时性要求高的场景

2. UDP 通信执行流程

基于DatagramSocket(快递站)和DatagramPacket(快递包裹)实现

发送端步骤
  • 创建发送端DatagramSocket对象
  • 打包数据DatagramPacket(数据、长度、目标 IP、端口)
  • 调用send()发送数据包
  • 释放资源
  • 接收端步骤
  • 创建接收端DatagramSocket对象,绑定端口
  • 创建空数据包接收数据
  • 调用receive()接收数据(阻塞等待)
  • 解析数据包打印内容
  • 释放资源
  • 3. 基础代码实现

    发送端

    public class SendDemo {
    public static void main(String[] args) throws IOException {
    DatagramSocket ds = new DatagramSocket();
    String msg = "hello udp";
    byte[] bytes = msg.getBytes();
    InetAddress address = InetAddress.getByName("127.0.0.1");
    int port = 10086;
    DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
    ds.send(dp);
    ds.close();
    }
    }

    接收端

    public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
    DatagramSocket ds = new DatagramSocket(10086);
    byte[] bytes = new byte[1024];
    DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
    ds.receive(dp);
    // 解析数据
    byte[] data = dp.getData();
    int len = dp.getLength();
    System.out.println("收到:" + new String(data,0,len));
    ds.close();
    }
    }

    4. UDP 三种通信方式

  • 单播:一对一发送,默认方式
  • 组播:一对多发送,组播地址范围224.0.0.0 ~ 239.255.255.255,使用MulticastSocket实现
  • 广播:一对全网段发送,广播地址255.255.255.255

  • 四、TCP 通信编程

    1. TCP 协议核心特点

    • 面向连接:通信前必须通过三次握手建立连接
    • 可靠传输:保证数据有序、不丢失、不重复
    • 传输效率低于 UDP,适合文件上传下载、网页浏览、邮件等对数据完整性要求高的场景
    • 基于 IO 流进行数据传输,两端分别为Socket(客户端)和ServerSocket(服务端)

    2. TCP 通信执行流程

    客户端(Socket)
  • 创建Socket对象,连接服务端 IP + 端口
  • 获取输出流,向服务端发送数据
  • 获取输入流,读取服务端返回数据
  • 释放资源关闭连接
  • 服务端(ServerSocket)
  • 创建ServerSocket对象,绑定监听端口
  • 调用accept()等待客户端连接(阻塞等待)
  • 获取输入流,读取客户端数据
  • 获取输出流,向客户端回写数据
  • 释放资源
  • 3. 基础代码实现

    客户端

    public class TcpClient {
    public static void main(String[] args) throws IOException {
    Socket socket = new Socket("127.0.0.1", 10000);
    // 发送数据
    OutputStream os = socket.getOutputStream();
    os.write("你好服务器".getBytes());
    // 接收返回
    InputStream is = socket.getInputStream();
    byte[] buf = new byte[1024];
    int len = is.read(buf);
    System.out.println("服务端回复:" + new String(buf,0,len));
    socket.close();
    }
    }

    服务端

    public class TcpServer {
    public static void main(String[] args) throws IOException {
    ServerSocket ss = new ServerSocket(10000);
    Socket accept = ss.accept(); // 等待客户端连接
    // 读取数据
    InputStream is = accept.getInputStream();
    byte[] buf = new byte[1024];
    int len;
    while((len = is.read(buf)) != -1){
    System.out.println("收到:" + new String(buf,0,len));
    }
    // 回复数据
    OutputStream os = accept.getOutputStream();
    os.write("收到了".getBytes());
    accept.close();
    ss.close();
    }
    }

    4. 三次握手:TCP 连接建立

    目的是确认双方收发能力正常,共三次交互:

  • 客户端向服务端发送连接请求,等待确认
  • 服务端收到请求后,向客户端返回确认响应
  • 客户端收到确认后,再次向服务端发送确认信息,连接正式建立
  • 5. 四次挥手:TCP 连接断开

    目的是确保双方数据都传输完毕,安全断开连接:

  • 客户端发起断开连接请求
  • 服务端收到请求,返回确认响应(此时服务端可能还有数据未发完)
  • 服务端数据处理完毕,向客户端发送断开确认
  • 客户端收到后返回最终确认,等待超时后连接彻底关闭

  • 五、UDP vs TCP 核心对比

    对比项UDPTCP
    连接性 无连接 面向连接,三次握手
    可靠性 不可靠,可能丢包 可靠,保证数据完整有序
    传输速度 快,开销小 稍慢,额外校验开销
    场景 直播、语音、视频通话 文件传输、网页、邮件
    数据形式 数据包 IO 字节流

    六、开发避坑指南 ⚠️

  • UDP 接收端必须先启动,再启动发送端,否则数据丢失
  • TCP 必须先启动服务端,再启动客户端,否则连接失败
  • 端口号不能重复占用,否则抛出端口占用异常
  • TCP 流关闭顺序:先关闭客户端,再关闭服务端
  • UDP 数据包大小建议不超过 64KB,过大容易丢包
  • TCP 读写注意流结束标记,避免阻塞等待
  • 七、文末总结

    网络编程的核心是三要素:IP 定位设备、端口定位程序、协议约定规则。UDP 快但不可靠,TCP 可靠但稍慢,根据业务场景选型。掌握 Socket 基础通信、三次握手四次挥手原理,是后端网络开发的必备基础。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Java 网络编程全套教程:UDP/TCP Socket 通信、三次握手四次挥手、协议分层全梳理
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!