第18篇:Java网络编程零基础详解,IP、端口、TCP、UDP、Socket通信、实战文件传输

前面17篇,我们彻底通关了:Java语法、面向对象、集合、IO流、多线程

今天我们攻克Java基础最后一个核心板块------网络编程

所有软件、聊天软件、服务器、接口请求、数据传输,底层全部依赖网络编程。

没有网络编程,程序就是单机程序;有了网络编程,程序才能联网、通信、交互、做服务端

本篇依旧零基础通俗讲解,从底层原理到手写Socket通信、TCP/UDP实战、文件传输,一次性吃透网络编程所有基础,学完本篇,Java基础全套体系彻底圆满收官

本篇核心学习目标:

  • 搞懂网络通信核心三要素:IP、端口、协议

  • 彻底分清TCP与UDP的区别与使用场景(面试必考)

  • 掌握InetAddress网络工具类

  • 精通TCP Socket通信(服务端+客户端)

  • 掌握UDP数据报通信机制

  • 手写TCP文件上传实战案例

  • 搞定网络编程高频面试题与开发规范


一、网络编程核心概念(通俗理解)

1.1 什么是网络编程?

网络编程:让两台计算机实现数据交互、通信的技术

本地IO是:电脑内存 ↔ 本地硬盘

网络编程是:电脑A ↔ 网络 ↔ 电脑B

1.2 网络通信三要素(必背)

  1. IP地址:定位设备(找到对方电脑)

  2. 端口号:定位程序(找到对方电脑上的软件)

  3. 通信协议:通信规则(怎么传、怎么收、规则统一)

通俗类比: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通信流程

  1. 服务端启动,监听指定端口

  2. 客户端连接服务端IP+端口

  3. 连接建立,双向数据传输

  4. 通信结束,关闭连接

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();
    }
}

八、网络编程高频面试题汇总

  1. **TCP和UDP区别?**连接、可靠性、速度、场景四大维度必背

  2. **三次握手四次挥手作用?**保证TCP连接可靠、断开安全

  3. 端口范围?自定义端口使用1024以上

  4. Socket和ServerSocket区别?客户端/服务端

  5. TCP如何实现文件传输?IO流+Socket读写

  6. UDP为什么不可靠?无连接机制,不确认接收


九、本篇总结 & Java基础终章总结

9.1 本篇总结

  • 网络三要素:IP、端口、协议

  • TCP可靠面向连接,UDP高速无连接

  • Socket实现客户端服务端通信

  • TCP适合文件传输,UDP适合实时流媒体

  • 综合IO流实现文件上传,打通前后知识闭环

9.2 Java基础全套终极总结

至此!Java零基础全套基础体系 100% 完结!!!

我们从零通关完整体系:

环境搭建 → 基础语法 → 数组 → 面向对象 → 抽象类接口 → 异常 → 常用工具类 → 集合框架 → IO流 → 多线程 → 网络编程

零基础、全覆盖、无死角、可直接应对面试和开发入门!

相关推荐
我命由我123451 小时前
Java 开发 - Jar 包与 War 包
java·开发语言·java-ee·intellij-idea·jar·idea·intellij idea
编程大师哥1 小时前
最高效的 IO 并发方案
linux·网络·python
Upsy-Daisy1 小时前
Hermes Agent 学习笔记 04:工具调用系统,让 Agent 从“会说”变成“会做”
java·笔记·学习
酣大智1 小时前
BGP选路原则--下一跳IGP Metric小的(8)
网络·华为·路由·bgp
Volunteer Technology1 小时前
SpringSecurity请求流转的本质
java·spring
心之伊始1 小时前
Spring AI MCP Client 实战:让 Java 后端通过 stdio 调用本地工具服务
java·spring boot·agent·spring ai·mcp
plainGeekDev1 小时前
文件读写(Java IO)→ Kotlin 扩展函数
android·java·kotlin
Full Stack Developme1 小时前
AspectJ 详解
java·后端
武子康1 小时前
Java-20 深入浅出 MyBatis - 手写ORM框架1 从原始 JDBC 暴露的 6 大问题开始
java·后端