前面17篇,我们彻底通关了:Java语法、面向对象、集合、IO流、多线程。
今天我们攻克Java基础最后一个核心板块------网络编程。
所有软件、聊天软件、服务器、接口请求、数据传输,底层全部依赖网络编程。
没有网络编程,程序就是单机程序;有了网络编程,程序才能联网、通信、交互、做服务端。
本篇依旧零基础通俗讲解,从底层原理到手写Socket通信、TCP/UDP实战、文件传输,一次性吃透网络编程所有基础,学完本篇,Java基础全套体系彻底圆满收官。

本篇核心学习目标:
-
搞懂网络通信核心三要素:IP、端口、协议
-
彻底分清TCP与UDP的区别与使用场景(面试必考)
-
掌握InetAddress网络工具类
-
精通TCP Socket通信(服务端+客户端)
-
掌握UDP数据报通信机制
-
手写TCP文件上传实战案例
-
搞定网络编程高频面试题与开发规范
一、网络编程核心概念(通俗理解)
1.1 什么是网络编程?
网络编程:让两台计算机实现数据交互、通信的技术。
本地IO是:电脑内存 ↔ 本地硬盘
网络编程是:电脑A ↔ 网络 ↔ 电脑B
1.2 网络通信三要素(必背)
-
IP地址:定位设备(找到对方电脑)
-
端口号:定位程序(找到对方电脑上的软件)
-
通信协议:通信规则(怎么传、怎么收、规则统一)
通俗类比:IP是小区地址,端口是房间号,协议是沟通语言
二、IP地址与端口详解
2.1 IP地址作用
唯一标识网络中的一台计算机,分为:
-
IPv4:4段数字,如127.0.0.1(本机回环地址)
-
IPv6:超长地址,解决IP枯竭问题
127.0.0.1:本地环路地址,本机测试专用
2.2 端口号作用
一台电脑可以运行无数程序,端口用来区分不同的网络程序。
端口范围:0~65535
-
0~1023:系统保留端口,禁止自定义使用
-
1024~65535:自定义程序端口(开发使用)
常见端口:
-
80:HTTP网页端口
-
443:HTTPS安全端口
-
3306:MySQL数据库端口
-
8080:Tomcat默认端口
三、InetAddress工具类(Java操作IP)
Java提供专门操作IP地址的工具类,无需手动解析字符串。
java
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IpDemo {
public static void main(String[] args) throws UnknownHostException {
// 获取本机IP
InetAddress local = InetAddress.getLocalHost();
System.out.println("本机IP:" + local.getHostAddress());
System.out.println("本机主机名:" + local.getHostName());
// 获取指定域名IP(百度)
InetAddress baidu = InetAddress.getByName("www.baidu.com");
System.out.println("百度IP:" + baidu.getHostAddress());
}
}
四、两大核心协议:TCP vs UDP(面试超级重点)
网络传输只有两大核心协议,所有网络通信都基于二者。
4.1 TCP协议(可靠传输)
TCP:面向连接、可靠、稳定、三次握手四次挥手
特点:
-
传输前必须建立连接
-
数据不丢失、不重复、有序
-
速度相对较慢
适用场景:文件传输、网页、登录、支付、聊天消息
4.2 UDP协议(快速传输)
UDP:无连接、不可靠、速度极快、只管发不管收
特点:
-
无需建立连接,直接发包
-
可能丢包、乱序
-
传输速度快、开销小
适用场景:直播、视频通话、游戏、广播、实时监控
4.3 TCP与UDP核心区别(必背面试表)
| 对比维度 | TCP | UDP |
|---|---|---|
| 连接特性 | 面向连接(需握手) | 无连接(直接发送) |
| 可靠性 | 可靠、不丢包、有序 | 不可靠、可能丢包乱序 |
| 速度 | 较慢 | 极快 |
| 适用场景 | 文件、网页、支付、登录 | 直播、游戏、视频通话 |
五、TCP Socket通信(C/S架构核心)
TCP通信是客户端+服务端架构,通过Socket套接字实现数据交互。
Socket:网络通信端点,相当于两台电脑的"数据通道"
5.1 TCP通信流程
-
服务端启动,监听指定端口
-
客户端连接服务端IP+端口
-
连接建立,双向数据传输
-
通信结束,关闭连接
5.2 服务端代码实战
java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
// TCP服务端
public class TcpServer {
public static void main(String[] args) throws IOException {
// 开启服务端,监听8888端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务端已启动,等待客户端连接...");
// 阻塞等待客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端已连接!");
// 读取客户端消息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = br.readLine();
System.out.println("收到客户端消息:" + msg);
// 关闭资源
br.close();
socket.close();
serverSocket.close();
}
}
5.3 客户端代码实战
java
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
// TCP客户端
public class TcpClient {
public static void main(String[] args) throws IOException {
// 连接本机8888端口服务端
Socket socket = new Socket("127.0.0.1", 8888);
// 向服务端发送消息
OutputStream os = socket.getOutputStream();
os.write("Hello Java网络编程!".getBytes());
// 关闭资源
os.close();
socket.close();
}
}
运行顺序:先启动服务端,再启动客户端,即可完成通信!
六、TCP实战:文件上传案例(IO+网络综合)
结合前面学的IO流+网络编程,实现客户端上传图片到服务端,综合实战巩固全套知识。
6.1 文件上传客户端
java
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;
public class UploadClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 9999);
// 读取本地文件
FileInputStream fis = new FileInputStream("D:\\test.jpg");
OutputStream os = socket.getOutputStream();
// 边读边写
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) != -1) {
os.write(buf, 0, len);
}
System.out.println("文件上传完成!");
fis.close();
os.close();
socket.close();
}
}
6.2 文件上传服务端
java
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(9999);
Socket socket = server.accept();
// 读取客户端文件流,写入本地
InputStream is = socket.getInputStream();
FileOutputStream fos = new FileOutputStream("D:\\receive.jpg");
byte[] buf = new byte[1024];
int len;
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
System.out.println("文件接收成功!");
fos.close();
is.close();
socket.close();
server.close();
}
}
七、UDP数据报通信详解
UDP无需建立连接,通过DatagramSocket、DatagramPacket数据包收发数据。
7.1 UDP发送端
java
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpSend {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();
String msg = "UDP消息发送成功!";
byte[] data = msg.getBytes();
// 打包数据:数据、长度、目标IP、目标端口
DatagramPacket packet = new DatagramPacket(data,data.length, InetAddress.getLocalHost(),8888);
socket.send(packet);
socket.close();
}
}
7.2 UDP接收端
java
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpReceive {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8888);
byte[] buf = new byte[1024];
// 接收数据包
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// 解析数据
String msg = new String(packet.getData(),0,packet.getLength());
System.out.println("收到UDP消息:" + msg);
socket.close();
}
}
八、网络编程高频面试题汇总
-
**TCP和UDP区别?**连接、可靠性、速度、场景四大维度必背
-
**三次握手四次挥手作用?**保证TCP连接可靠、断开安全
-
端口范围?自定义端口使用1024以上
-
Socket和ServerSocket区别?客户端/服务端
-
TCP如何实现文件传输?IO流+Socket读写
-
UDP为什么不可靠?无连接机制,不确认接收
九、本篇总结 & Java基础终章总结
9.1 本篇总结
-
网络三要素:IP、端口、协议
-
TCP可靠面向连接,UDP高速无连接
-
Socket实现客户端服务端通信
-
TCP适合文件传输,UDP适合实时流媒体
-
综合IO流实现文件上传,打通前后知识闭环
9.2 Java基础全套终极总结
至此!Java零基础全套基础体系 100% 完结!!!
我们从零通关完整体系:
环境搭建 → 基础语法 → 数组 → 面向对象 → 抽象类接口 → 异常 → 常用工具类 → 集合框架 → IO流 → 多线程 → 网络编程
零基础、全覆盖、无死角、可直接应对面试和开发入门!