news 2026/4/16 9:04:58

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/4/14 23:49:24

【Java ArrayList】底层方法的自我实现

【JAVA 进阶】Spring Boot 事务深度解析:从理论到实践的完整指南 Spring Boot 中的事务管理是构建可靠企业级应用的核心,尤其在处理数据库操作时,确保数据一致性和完整性。本指南从事务理论基础入手,逐步深入到Spring Boot 的实现…

作者头像 李华
网站建设 2026/4/3 4:04:59

zip解压

import zipfile# 解压到当前目录 with zipfile.ZipFile(archive.zip, r) as zip_ref:zip_ref.extractall()# 解压到指定目录 with zipfile.ZipFile(archive.zip, r) as zip_ref:zip_ref.extractall(/path/to/extract)

作者头像 李华
网站建设 2026/4/16 9:04:43

YOLO26涨点改进 | 全网独家创新、注意力涨点改进篇 | CVPR 2025 | YOLO26引入SSA序列打乱注意力模块,含MSCSA二次创新模块、助力目标检测、图像分类、实例分割有效涨点

一、本文介绍 🔥本文给大家介绍将 Sequence Shuffle Attention (SSA) 模块改进 YOLO26网络模型,可以显著提升模型的性能。SSA 通过捕捉长程依赖关系、保持图像的局部性与连续性,增强了对复杂场景和小目标的检测能力。同时,SSA 高效地聚合来自不同扫描方向的特征,减少冗余…

作者头像 李华
网站建设 2026/4/8 14:41:42

HoRain云--Apache和Nginx的比较以及实用场景分析

🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …

作者头像 李华