1、什么是计算机网络核心定义计算机网络是将地理上分散的、具有独立功能的多台计算机系统通过通信设备和传输介质连接起来由完善的网络软件操作系统、网络协议等实现资源共享与信息交换的系统。核心特征互联互通依托传输介质光纤、网线、无线和通信设备路由器、交换机打破地理限制连接设备。资源共享包含硬件资源打印机、存储设备、软件资源应用软件、数据库、数据资源文件、影音三类共享。通信协议遵循统一的网络规则如 TCP/IP 协议簇保障设备间数据传输的准确性与有序性。网络分类按覆盖范围网络类型覆盖范围典型场景局域网LAN1km 内办公室、校园公司内网、学校机房网络城域网MAN10-100km城市内城市级政务网络、运营商区域网络广域网WAN100km 以上跨城市 / 国家互联网、跨国企业专线2、网络通信的两个要素网络通信的核心是让不同设备间精准传输数据两大核心要素缺一不可1. 寻址定位目标设备解决 “数据发给谁” 的问题通过IP 地址定位网络中的目标主机是数据传输的 “地址标识”。2. 端口定位设备内的进程解决 “设备中哪个程序接收数据” 的问题通过端口号0-65535定位主机内的具体进程如 80 端口对应 HTTP 服务、3306 对应 MySQL。补充逻辑IP 地址 端口号共同构成网络通信的唯一标识即 “套接字Socket”是网络编程中建立连接的核心基础。3、IP 地址定义IP 地址是网络中主机的唯一逻辑标识用于区分不同设备让数据能精准送达目标主机。主流版本IPv4格式32 位二进制分为 4 段 8 位二进制数以 “点分十进制” 展示如192.168.1.1每段取值范围 0-255。分类A/B/C 类为主D/E 类特殊用途A 类1.0.0.0-126.255.255.255大型网络主机数多B 类128.0.0.0-191.255.255.255中型网络企业 / 园区C 类192.0.0.0-223.255.255.255小型网络家庭 / 办公室特殊 IP127.0.0.1本地回环地址用于本机测试不经过物理网卡。192.168.x.x/172.16-31.x.x/10.x.x.x.x私有 IP仅局域网内使用无法直接访问互联网。发展趋势IPv6因 IPv4 地址枯竭IPv6 采用 128 位二进制格式为 8 组十六进制数如2001:0db8:85a3:0000:0000:8a2e:0370:7334地址数量近乎无限适配物联网等场景。4、端口Port定义端口是设备与网络软件交互的逻辑接口是 TCP/IP 协议中用于区分进程的标识范围 0-65535。端口分类知名端口0-1023系统预留对应主流网络服务需管理员权限占用80HTTP超文本传输协议网页访问443HTTPS安全超文本传输协议加密网页22SSH远程安全登录3306MySQL数据库服务8080常用备用 HTTP 端口如 Tomcat 默认端口注册端口1024-49151第三方软件常用端口需避免冲突如 8080、9090。动态 / 私有端口49152-65535客户端临时分配端口用于主动发起连接。核心作用网络数据到达主机后通过端口匹配对应进程同一主机可通过不同端口运行多个网络服务避免数据混淆。5、通信协议定义通信协议是设备间数据传输的规则集合规定了数据的格式、传输方式、错误处理等是网络通信的 “语言标准”。核心协议分类基于 TCP/IP 模型协议层级核心协议作用特点应用层HTTP/HTTPS、FTP、SMTP定义应用层数据格式如网页、文件、邮件面向用户直接支撑业务传输层TCP、UDP端到端的数据传输控制数据可靠性网络编程核心操作层网络层IP、ICMP网络层寻址与路由选择决定数据传输路径链路层MAC、ARP物理层数据帧的传输与解析基于硬件的底层通信两大核心传输层协议TCP传输控制协议面向连接、可靠传输适合文件传输、聊天等对数据完整性要求高的场景。UDP用户数据报协议无连接、不可靠传输速度快适合视频直播、实时消息等对实时性要求高的场景。6、TCP 实现聊天核心原理TCP 是面向连接的协议通信前需通过 “三次握手” 建立连接通信后通过 “四次挥手” 断开连接保证数据可靠传输。实现步骤Java 为例1. 服务端Server创建ServerSocket绑定指定端口如 8888监听客户端连接。调用accept()方法阻塞等待客户端连接获取Socket对象。通过Socket获取输入流InputStream读取客户端发送的消息获取输出流OutputStream向客户端回复消息。通信结束后关闭流与Socket。2. 客户端Client创建Socket指定服务端 IP 地址和端口号发起连接。通过Socket获取输出流向服务端发送消息获取输入流读取服务端回复。通信结束后关闭流与Socket。核心代码片段// 服务端核心代码 ServerSocket serverSocket new ServerSocket(8888); Socket socket serverSocket.accept(); // 阻塞等待连接 BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream())); String msg br.readLine(); // 读取客户端消息 System.out.println(客户端 msg); // 回复消息 PrintWriter pw new PrintWriter(socket.getOutputStream(), true); pw.println(服务端已收到 msg); // 客户端核心代码 Socket socket new Socket(127.0.0.1, 8888); PrintWriter pw new PrintWriter(socket.getOutputStream(), true); pw.println(你好服务端); // 发送消息 BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream())); String reply br.readLine(); // 读取服务端回复 System.out.println(服务端 reply);关键注意事项服务端需先启动再启动客户端否则连接失败。需处理端口占用问题若 8888 端口被占用更换端口号。流的读取需匹配格式如按行读取避免数据解析异常。7、TCP 文件上传实现核心原理基于 TCP 的可靠传输特性客户端读取本地文件通过网络流发送至服务端服务端接收数据并写入本地文件完成上传。实现步骤Java 为例1. 服务端绑定端口监听客户端连接获取Socket。读取Socket输入流将数据写入本地文件如upload/test.txt。向客户端发送 “上传成功” 的反馈关闭资源。2. 客户端创建Socket连接服务端。读取本地文件如D:/test.txt通过Socket输出流发送数据。读取服务端的上传反馈关闭资源。核心代码片段// 服务端接收文件 ServerSocket serverSocket new ServerSocket(9999); Socket socket serverSocket.accept(); FileOutputStream fos new FileOutputStream(upload.txt); byte[] buf new byte[1024]; int len; while ((len socket.getInputStream().read(buf)) ! -1) { fos.write(buf, 0, len); } // 反馈上传成功 PrintWriter pw new PrintWriter(socket.getOutputStream(), true); pw.println(文件上传成功); // 客户端发送文件 Socket socket new Socket(127.0.0.1, 9999); FileInputStream fis new FileInputStream(D:/test.txt); byte[] buf new byte[1024]; int len; while ((len fis.read(buf)) ! -1) { socket.getOutputStream().write(buf, 0, len); } socket.shutdownOutput(); // 关闭输出流告知服务端发送完毕 // 读取反馈 BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println(br.readLine());关键优化点需处理文件路径不存在的问题提前创建目录。大文件上传可增加进度条显示提升用户体验。服务端需支持多客户端并发上传可通过多线程实现。8、初识 Tomcat定义Tomcat 是 Apache 基金会开发的开源轻量级 Web 服务器支持运行 Java Servlet、JSP 等 Java Web 应用是 Java Web 开发的核心工具。核心作用处理 HTTP 请求接收客户端浏览器的 HTTP 请求转发给对应的 Servlet 处理。运行 Web 应用将 Java Web 项目WAR 包或目录形式部署至 Tomcat实现项目的对外访问。管理 Servlet 生命周期负责 Servlet 的创建、初始化、执行、销毁。核心组件Servlet 容器管理 Servlet 的运行是 Tomcat 的核心组件。Connector连接器监听指定端口默认 8080接收客户端请求。Engine引擎处理多个 Connector 的请求完成路由转发。基础使用步骤下载安装从 Apache 官网下载 Tomcat 压缩包解压即可无需安装绿色版。启动运行进入bin目录执行startup.batWindows或startup.shLinux启动后访问http://localhost:8080出现 Tomcat 默认页面即启动成功。部署 Web 应用将 Web 项目放入webapps目录或通过 Tomcat 管理界面部署重启 Tomcat 后即可访问。与网络编程的关联原生 Java 网络编程需手动处理 TCP 连接、HTTP 解析而 Tomcat 封装了底层网络通信开发者只需关注业务逻辑如 Servlet 编写快速开发 Web 应用。9、UDP 消息发送核心原理UDP 是无连接协议无需提前建立连接直接将数据封装为数据报DatagramPacket发送速度快但不保证数据可靠传输。核心类JavaDatagramSocketUDP 通信的套接字用于发送和接收数据报。DatagramPacket封装数据报包含数据、目标 IP、端口等信息。发送步骤Java创建DatagramSocket对象可指定端口若不指定则随机分配。封装要发送的数据为字节数组创建DatagramPacket指定目标 IP 和端口。调用DatagramSocket的send()方法发送数据报。关闭DatagramSocket。核心代码片段// UDP发送端 DatagramSocket socket new DatagramSocket(); String msg UDP消息发送测试; byte[] data msg.getBytes(); // 封装数据报数据、长度、目标地址、端口 InetAddress address InetAddress.getByName(127.0.0.1); DatagramPacket packet new DatagramPacket(data, data.length, address, 8888); socket.send(packet); // 发送数据报 socket.close();关键特性无连接发送前无需与接收端建立连接直接发送。数据报限制单个数据报最大长度为 64KB含头部超过则需拆分。不可靠发送后无确认机制数据可能丢失或乱序。10、UDP 聊天实现核心逻辑UDP 聊天需同时实现发送端和接收端双方通过DatagramSocket发送数据报通过线程监听接收数据实现双向聊天。实现步骤Java1. 接收端创建DatagramSocket绑定指定端口如 8888。定义循环持续创建DatagramPacket调用receive()方法阻塞接收数据。解析数据报打印接收到的消息。2. 发送端创建DatagramSocket随机分配端口。通过控制台输入消息封装为DatagramPacket发送至接收端 IP 和端口。循环输入实现持续聊天。3. 优化双向聊天创建两个线程一个线程负责发送消息一个线程负责接收消息实现双方实时聊天。核心代码片段接收端DatagramSocket socket new DatagramSocket(8888); while (true) { 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(对方 msg); }注意事项接收端需先启动否则发送端的消息会丢失。需处理控制台输入的异常确保聊天流程顺畅。UDP 不保证消息顺序若需有序需手动实现序号标记。11、UDP 多线程在线咨询核心需求实现多客户端同时与服务端进行 UDP 聊天服务端通过多线程处理每个客户端的请求避免单线程阻塞。核心原理服务端创建一个DatagramSocket监听端口通过线程池或多线程处理每个客户端的消息。每个客户端对应一个独立线程服务端接收客户端消息后通过线程回复实现多客户端并发咨询。实现步骤Java1. 服务端创建DatagramSocket绑定端口如 9999。定义循环持续接收客户端数据报解析客户端 IP 和端口。为每个客户端创建一个独立线程将数据报和客户端信息传递给线程由线程处理回复逻辑。2. 客户端创建DatagramSocket实现发送和接收消息的线程支持双向通信。完整代码1. 服务端UDPServer.javaimport java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPServer { public static void main(String[] args) throws Exception { // 1. 创建服务端Socket绑定端口9999 DatagramSocket serverSocket new DatagramSocket(9999); System.out.println(UDP 多线程咨询服务端已启动等待客户端连接...); // 2. 循环接收客户端消息 while (true) { byte[] buffer new byte[1024]; DatagramPacket packet new DatagramPacket(buffer, buffer.length); // 阻塞接收消息 serverSocket.receive(packet); // 3. 每收到一个消息交给独立线程处理 new Thread(new UDPClientHandler(serverSocket, packet)).start(); } } } // 线程处理类处理单个客户端的消息 class UDPClientHandler implements Runnable { private DatagramSocket socket; private DatagramPacket packet; public UDPClientHandler(DatagramSocket socket, DatagramPacket packet) { this.socket socket; this.packet packet; } Override public void run() { try { // 1. 解析客户端消息 String msg new String(packet.getData(), 0, packet.getLength()); InetAddress clientIP packet.getAddress(); int clientPort packet.getPort(); System.out.println([ clientIP : clientPort ] 说 msg); // 2. 服务端回复消息 String reply 【服务端回复】已收到你的消息 msg; byte[] replyBytes reply.getBytes(); // 3. 封装回复数据包 DatagramPacket replyPacket new DatagramPacket( replyBytes, replyBytes.length, clientIP, clientPort ); // 4. 发送回复 socket.send(replyPacket); } catch (Exception e) { e.printStackTrace(); } } }2. 客户端UDPClient.java支持收发双向import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; public class UDPClient { public static void main(String[] args) throws Exception { DatagramSocket socket new DatagramSocket(); InetAddress serverIP InetAddress.getByName(127.0.0.1); int serverPort 9999; // 启动线程持续接收服务端回复 new Thread(() - { try { while (true) { byte[] buffer new byte[1024]; DatagramPacket packet new DatagramPacket(buffer, buffer.length); socket.receive(packet); String reply new String(packet.getData(), 0, packet.getLength()); System.out.println(reply); } } catch (Exception e) { e.printStackTrace(); } }).start(); // 主线程发送消息 Scanner scanner new Scanner(System.in); while (true) { String msg scanner.nextLine(); byte[] bytes msg.getBytes(); DatagramPacket packet new DatagramPacket(bytes, bytes.length, serverIP, serverPort); socket.send(packet); } } }运行说明先启动服务端UDPServer再启动客户端UDPClient可以同时启动多个客户端服务端都能正常处理客户端输入消息 → 服务端接收 → 自动回复真正实现UDP 多线程并发咨询12、URL 与 URLConnection 网络资源访问是 Java 中最常用、最简单的网络资源获取方式。12.1 什么是 URLURLUniform Resource Locator统一资源定位符就是我们常说的网址。它用于精准定位互联网上的任意资源网页、图片、文件、接口等。标准格式协议://主机地址:端口号/文件路径?参数#锚点示例https://www.csdn.net:443/index.html?nametest#title各部分说明协议https、http、ftp、file 等主机域名或 IP 地址端口默认 80HTTP、443HTTPS路径资源所在位置参数? 后面的键值对锚点# 后面的页面定位标记12.2 URL 类常用方法通过 URL 对象可以直接拆分获取网址的各个部分。getProtocol()获取协议getHost()获取主机getPort()获取端口getPath()获取路径getFile()获取文件部分完整代码URL 解析import java.net.URL; public class URLDemo { public static void main(String[] args) throws Exception { // 创建URL对象 URL url new URL(https://blog.csdn.net:443/article/details/130001.html); // 获取各个部分 System.out.println(协议 url.getProtocol()); System.out.println(主机 url.getHost()); System.out.println(端口 url.getPort()); System.out.println(默认端口 url.getDefaultPort()); System.out.println(路径 url.getPath()); System.out.println(文件 url.getFile()); } }运行结果协议https 主机blog.csdn.net 端口443 默认端口443 路径/article/details/130001.html 文件/article/details/130001.html12.3 URLConnection 实现网络请求URLConnection是 Java 提供的用于实现网络连接的核心类可以发送请求、获取响应、读取资源。核心步骤创建 URL 对象通过openConnection()获取连接对象设置请求头模拟浏览器获取输入流读取数据网页 / 图片 / 文件关闭流简单示例思路URL url new URL(https://www.csdn.net); URLConnection conn url.openConnection(); InputStream is conn.getInputStream(); // 用流读取内容12.4 典型应用爬取网页 HTML下载网络图片、文件调用第三方接口获取 JSON 数据模拟浏览器请求实战 1获取网页源码完整代码import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class URLConnectionGetHTML { public static void main(String[] args) throws Exception { // 1. 定义地址 URL url new URL(https://www.csdn.net); // 2. 打开连接 URLConnection conn url.openConnection(); // 3. 设置请求头模拟浏览器否则可能被拦截 conn.setRequestProperty(User-Agent, Mozilla/5.0); // 4. 获取输入流 BufferedReader br new BufferedReader( new InputStreamReader(conn.getInputStream(), UTF-8) ); // 5. 读取数据 String line; while ((line br.readLine()) ! null) { System.out.println(line); } // 6. 关闭 br.close(); } }功能直接打印 CSDN 首页完整 HTML 源码。实战 2下载网络图片到本地超级常用import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; public class URLDownloadImage { public static void main(String[] args) throws Exception { // 网络图片地址 URL url new URL(https://img-blog.csdnimg.cn/123456.png); // 打开连接 URLConnection conn url.openConnection(); conn.setRequestProperty(User-Agent, Mozilla/5.0); // 获取输入流 InputStream is conn.getInputStream(); // 写入本地文件 FileOutputStream fos new FileOutputStream(csdn_img.png); // 缓冲区读写 byte[] buffer new byte[1024]; int len; while ((len is.read(buffer)) ! -1) { fos.write(buffer, 0, len); } System.out.println(图片下载完成); // 关闭 fos.close(); is.close(); } }功能把网络图片直接下载到项目根目录。实战 3模拟浏览器发送请求带请求头很多网站会校验请求来源必须模拟浏览器才能正常访问URLConnection conn url.openConnection(); // 设置请求头模拟浏览器 conn.setRequestProperty(User-Agent, Mozilla/5.0 (Windows NT 10.0; Win64; x64)); conn.setRequestProperty(Accept, text/html,application/xhtmlxml); conn.setRequestProperty(Accept-Language, zh-CN,zh;q0.9); conn.setRequestProperty(Connection, keep-alive);12.5 URLConnection 与 TCP/UDP 的区别方式特点适用场景TCP/UDP底层传输、灵活、代码量大自定义协议、聊天、文件传输URL/URLConnection高层封装、简单易用、HTTP 专用网页获取、图片下载、接口调用TCP/UDP 是地基什么都能做但复杂。URLConnection 是房子专门用于 HTTP 资源访问开箱即用。实际开发中爬虫、接口调用、文件下载优先使用 URLConnection自定义通信、聊天、游戏服务端则使用 TCP/UDP12.6 本章总结URL用于定位网络资源可拆分协议、主机、端口、路径。URLConnection用于发起网络连接获取网页、图片、文件。三步万能公式创建 URL → 打开连接 → 读取流。是 Java 网络编程从底层到上层应用的必备技能。