news 2026/5/12 22:43:57

Java中的网络基础认知

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java中的网络基础认知

Java 中的网络基础认知

在 Java 开发中,网络编程是后端、分布式系统、微服务、游戏服务器、即时通信等领域的核心基础。Java 从 JDK 1.0 开始就提供了强大的网络支持,主要集中在java.net包(传统阻塞式 IO)和java.nio包(非阻塞 IO)。

下面从最基础的认知必须掌握的核心概念,系统梳理 Java 网络编程的知识框架。

一、网络编程最核心的两个问题

  1. 如何定位网络上的另一台机器?
    IP 地址(IPv4 / IPv6) +端口号(0~65535)

  2. 如何在两台机器之间可靠/高效地传输数据?
    → 依赖传输层协议:TCPUDP

Java 网络编程本质上就是在操作Socket(套接字),而 Socket 是对 TCP/UDP 协议的抽象。

二、TCP vs UDP —— 必须烂熟于心的对比

维度TCP (Transmission Control Protocol)UDP (User Datagram Protocol)
连接性面向连接(三次握手、四次挥手)无连接(直接发包)
可靠性可靠(重传、确认、排序、流量控制、拥塞控制)不可靠(丢包、乱序、重传、重复都可能发生)
传输模式字节流(stream-oriented)数据报(datagram-oriented,有明确边界)
传输效率较慢(头部 20+ 字节,开销大)快(头部仅 8 字节)
使用场景HTTP、HTTPS、FTP、SMTP、数据库连接、RPC、聊天室等DNS、视频/音频直播、游戏、广播、IoT 传感器等
Java 核心类SocketServerSocketDatagramSocketDatagramPacket
是否有序有序无序
流量控制有(滑动窗口)

一句话总结

  • 需要可靠、有序、不丢数据→ 选 TCP
  • 需要极致速度、低延迟、能容忍少量丢包→ 选 UDP

三、Java 网络编程三大模型(IO 模型认知)

Java 网络 IO 经历了三个时代:

模型引入版本核心特点是否阻塞适用场景代表类
BIOJDK 1.0阻塞式 IO,一连接一线程阻塞连接数少、低并发SocketServerSocket
NIOJDK 1.4非阻塞 IO + 多路复用(Selector)非阻塞中高并发、连接多但活跃少ChannelBufferSelector
AIOJDK 1.7异步 IO(Proactor 模型)异步极高并发、长连接AsynchronousSocketChannel

2025-2026 年主流认知

  • 小型项目、学习阶段 →BIO(最简单)
  • 中大型服务器、网关、IM →NIO(Netty 是事实标准)
  • 极致性能场景 →Netty(基于 NIO 封装)或 AIO(较少使用)

四、Java 网络编程最核心的类(java.net 包)

类名作用典型用法场景
InetAddress表示 IP 地址(域名解析)获取本机 IP、解析域名
Socket客户端 TCP 套接字连接服务器、读写数据
ServerSocket服务端 TCP 监听套接字accept() 等待客户端连接
DatagramSocketUDP 发送/接收套接字无连接 UDP 通信
DatagramPacketUDP 数据报(封装数据 + 地址)发送/接收 UDP 包
URL/URLConnection访问 HTTP/HTTPS/FTP 等资源爬虫、调用 REST API
HttpURLConnectionHTTP 专用连接(POST/GET/头/状态码)传统 HTTP 客户端

现代替代

  • HTTP 客户端 →java.net.http.HttpClient(JDK 11+ 引入,推荐)
  • 高性能网络 →Netty/OkHttp/Apache HttpClient

五、必须记住的几个关键概念

  1. 端口号

    • 0~1023:知名端口(系统保留,如 80、443、3306)
    • 1024~49151:注册端口
    • 49152~65535:动态/私有端口(程序常用)
  2. 三次握手 & 四次挥手

    • 建立连接:SYN → SYN-ACK → ACK
    • 关闭连接:FIN → ACK → FIN → ACK
  3. 粘包 & 半包(TCP 特有)

    • TCP 是无边界字节流,不是一条消息对应一个包
    • 常见解决方案:
      • 定长消息
      • 特殊分隔符(\n、\0)
      • 长度前缀(最推荐:消息头 4 字节记录长度)
  4. 心跳机制

    • 防止长连接被防火墙/网关干掉
    • 常见方式:每 30s~60s 发送一次 ping/pong
  5. 域名解析

    InetAddressaddr=InetAddress.getByName("www.example.com");

六、学习路径建议(从入门到进阶)

  1. 入门阶段(1-2 周)

    • 掌握 BIO 的 TCP 服务器/客户端(echo、聊天室)
    • 理解 UDP 的广播/组播
  2. 中级阶段(2-4 周)

    • 手写 BIO + 线程池
    • 理解粘包/半包并解决
    • 实现心跳机制
  3. 高级阶段(持续积累)

    • 深入 NIO(Channel、Buffer、Selector)
    • 学习 Netty(主流企业级选择)
    • 掌握协议设计(Protobuf、自定义二进制协议)

总结一句话认知

Java 网络编程的核心就是“用 Socket 操作 TCP/UDP 协议”,而真正决定系统能力的,是你对 IO 模型(BIO/NIO/AIO)、协议设计(粘包/心跳/分包)、并发模型(线程池/事件驱动)的理解深度。

如果你现在处于哪个阶段?

  • 刚入门,想看最简单的 TCP echo 代码?
  • 想搞懂 BIO 转 NIO 的本质区别?
  • 还是准备直接上 Netty?

告诉我,我可以给出更针对性的讲解或完整示例代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 23:43:34

Vue 响应式数据失效全解析:从原理机制到工程实践

Vue 响应式数据失效全解析:从原理机制到工程实践 Vue 的响应式系统是其核心竞争力之一,让数据变更自动触发视图更新。但在实际开发中,常常遇到“响应式失效”的问题:数据变了,但视图没更新。这篇文章从Vue 响应式原理…

作者头像 李华
网站建设 2026/5/11 15:38:35

C :结构体详解

C语言结构体(struct)超级详解 从最基础到最容易被面试官问到的进阶用法,一次性讲透! 1. 结构体最基础的概念 struct 结构体标签名 {类型1 成员名1;类型2 成员名2;...类型N 成员名N; };最常用的三种写法(请牢牢记住…

作者头像 李华
网站建设 2026/5/11 2:41:10

‌边缘推理测试:TinyML模型在IoT设备的长期稳定性验证框架‌

边缘智能时代的测试新挑战 随着TinyML技术加速渗透工业物联网(IIoT)场景,模型在资源受限设备(如ESP32)的长期运行稳定性成为质量保障核心痛点。传统测试方法难以覆盖数月级持续推理中的内存泄漏、精度漂移等隐患&…

作者头像 李华
网站建设 2026/5/5 23:13:19

2026年春节全国天气旅游指南:寻一方晴暖,觅一隅雪趣

2026年春节,华夏大地将呈现一幅“北国冰雪雕琢,江南烟雨朦胧,西南晴暖如春”的多元天气画卷。春节出游,选对目的地,才能尽享天时之美。 一、主题推荐:四大天气类型的绝佳目的地 1. 冰雪奇缘北国风光带 核…

作者头像 李华
网站建设 2026/5/10 9:07:19

struct of_device_id

struct of_device_id 是 Linux 设备树(Device Tree, DT) 机制中,用于驱动与设备树节点进行匹配的核心数据结构,主要在 ARM、ARM64、RISC-V 等现代架构的驱动开发中使用,替代了传统的 platform_device_id 匹配方式&…

作者头像 李华
网站建设 2026/5/12 8:43:36

学术写作新助力:百考通AI如何应对重复率与AIGC双重检测挑战

一、双重检测时代:学术写作面临的新挑战 近年来,随着学术检测技术的不断升级,国内高校和期刊普遍建立了更为严格的论文审核机制。 传统的“查重”已从单纯的文字重复检测,演变为“文字重复率AI生成内容(AIGC&#xf…

作者头像 李华