1210 字
6 分钟

Java 网络编程

2026-03-11
浏览量 加载中...

一、 网络基础概念#

1.1 网络通信#

  • 概念:两台设备之间通过网络实现数据传输。

  • Java支持:java.net 包提供了一系列类/接口用于网络通信。

1.2 网络分类#

  • 局域网 (LAN):覆盖范围最小,如一个教室、机房。

  • 城域网 (MAN):覆盖一个城市。

  • 广域网 (WAN):覆盖全国或全球,如互联网。

1.3 IP地址#

  • 作用:唯一标识网络中的每台计算机/主机。

  • 表示形式:点分十进制 xx.xx.xx.xx(每个数范围0~255)。

  • 组成:网络地址 + 主机地址。

  • IPv4 vs IPv6:IPv4地址资源有限,IPv6地址数量极大,是下一代协议。

  • IPv4地址分类

类型范围
A类0.0.0.0 到 127.255.255.255
B类128.0.0.0 到 191.255.255.255
C类192.0.0.0 到 223.255.255.255
D类224.0.0.0 到 239.255.255.255 (多播)
E类240.0.0.0 到 247.255.255.255 (保留)

1.4 域名与端口#

1.5 网络通信协议#

  • TCP/IP协议簇:Internet最基本的协议,由网络层的IP协议和传输层的TCP协议等组成。

  • 网络模型

OSI模型TCP/IP模型TCP/IP模型各层协议
应用层应用层HTTP, FTP, Telnet, DNS…
表示层应用层
会话层应用层
传输层传输层TCP, UDP…
网络层网络层IP, ICMP, ARP…
数据链路层物理+数据链路层Link
物理层物理+数据链路层Link

1.6 TCP 与 UDP 协议#

特性TCP (传输控制协议)UDP (用户数据报协议)
连接性面向连接 (三次握手)无连接
可靠性可靠,数据不丢失不可靠,可能丢包
通信单位字节流数据报 (包)
数据大小无限制每个数据报 ≤ 64K
效率较低 (需建立/释放连接)较高
应用场景文件传输、邮件、网页浏览音视频通话、直播、DNS查询

二、 InetAddress 类#

  • 作用:用于封装IP地址和域名。

  • 常用方法

    • InetAddress.getLocalHost():获取本机InetAddress对象。

    • InetAddress.getByName(String host):根据主机名/域名获取对象。

    • getHostName():获取主机名。

    • getHostAddress():获取IP地址字符串。

三、 Socket 编程#

3.1 Socket 概念#

  • 套接字(Socket)是网络通信的端点。

  • 通信两端都必须有Socket。

  • 数据在Socket间通过IO流传输。

  • 主动发起连接的是客户端,等待连接的是服务端

四、 TCP 网络编程#

4.1 编程模型#

  • 服务端

    1. 创建 ServerSocket,在指定端口监听。

    2. 调用 accept() 等待客户端连接,连接成功返回 Socket 对象。

    3. 通过 Socket.getInputStream() 读取客户端发送的数据。

    4. 通过 Socket.getOutputStream() 向客户端回复数据。

    5. 关闭资源。

  • 客户端

    1. 创建 Socket,连接服务端(指定IP和端口)。

    2. 通过 Socket.getOutputStream() 发送数据。

    3. 通过 Socket.getInputStream() 接收服务端回复。

    4. 关闭资源。

4.2 应用案例#

  1. 案例1 (字节流,单向):客户端发送“hello, server”后退出,服务端接收并打印。

  2. 案例2 (字节流,双向):客户端发送消息,服务端回复“hello, client”,客户端接收回复。

    • 注意:通信结束时,应调用 socket.shutdownOutput() 设置输出结束标记,告知对方数据已发送完毕,避免对方 read 方法阻塞。
  3. 案例3 (字符流,双向):使用 BufferedReader 和 BufferedWriter 包装流进行字符通信。

    • 注意:使用 bufferedWriter.newLine() 插入换行作为结束标记,并调用 flush() 手动刷新缓冲区。
  4. 案例4 (文件上传):客户端发送图片/文件,服务端保存到本地,并回复“收到图片”。

    • 核心:使用 BufferedInputStream 和 BufferedOutputStream 提高效率。

    • 工具类:使用 StreamUtils 将输入流转换为字节数组或字符串,简化操作。

4.3 注意事项#

  • 实际通信中,客户端也会使用一个随机端口与服务端通信。

  • 可使用 netstat -an 指令查看主机网络状态(监听端口和连接信息)。

五、 UDP 网络编程#

5.1 基本介绍#

  • 核心类:DatagramSocket (数据报套接字) 和 DatagramPacket (数据包/数据报)。

  • 无连接:每个数据包独立,包含发送方和接收方的IP与端口。

  • 不可靠:不保证送达和顺序。

5.2 编程模型#

  • 发送端

    1. 创建 DatagramSocket 对象。

    2. 将数据封装到 DatagramPacket 对象中(指定数据、长度、目标IP、端口)。

    3. 调用 socket.send(packet) 发送。

    4. 可接收回复。

    5. 关闭 socket。

  • 接收端

    1. 创建 DatagramSocket 并在指定端口监听。

    2. 创建空的 DatagramPacket 对象用于接收。

    3. 调用 socket.receive(packet) 阻塞等待数据。

    4. 拆包 (packet.getData()) 处理数据。

    5. 可回复数据。

    6. 关闭 socket。

5.3 应用案例#

  • 接收端A在9999端口等待,发送端B发送“hello, 明天吃火锅~”,A接收后回复“好的,明天见”。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Java 网络编程
https://blog.tsh520.cn/posts/java笔记本/java网络编程/
作者
团子和蛋糕
发布于
2026-03-11
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
团子和蛋糕
团子喜欢吃蛋糕!
公告
如果你喜欢,那么欢迎来到我的世界!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
23
分类
7
标签
14
总字数
85,228
运行时长
0
最后活动
0 天前

目录