跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 网络编程与网络通信基础

Java 网络编程涵盖套接字编程、TCP/IP、UDP 及 HTTP 通信。核心类包括 Socket、ServerSocket、DatagramSocket 等。TCP 提供可靠连接,通过 ServerSocket 监听端口并处理多线程请求;UDP 无连接,基于 DatagramPacket 传输数据;HTTP 基于 URL 和 URLConnection 实现 Web 交互。实际场景涉及文件传输、聊天应用等开发。掌握这些基础有助于解决网络通信问题。

松间照月发布于 2026/3/16更新于 2026/10/24128 浏览
Java 网络编程与网络通信基础

Java 网络编程与网络通信基础

图片描述

13.1 学习目标与重点提示

学习目标:掌握 Java 网络编程的核心概念与通信方式,包括套接字编程、TCP/IP 通信、UDP 通信、HTTP 通信的实现方法,学会在实际开发中处理网络通信问题。

重点:

  • 套接字编程(Socket、ServerSocket)
  • TCP/IP 通信(服务器端、客户端)
  • UDP 通信(DatagramSocket、DatagramPacket)
  • HTTP 通信(URL、URLConnection)
  • 网络编程的实际应用场景

13.2 网络编程概述

Java 网络编程是用于处理网络通信的机制。

13.2.1 网络编程的定义

定义:网络编程是用于处理网络通信的机制。

作用:

  • 实现客户端与服务器之间的通信。
  • 实现不同设备之间的数据传输。
  • 实现网络应用程序的开发。

结论:网络编程是实现客户端与服务器通信、设备间数据传输及网络应用开发的基础机制。

13.2.2 网络编程的分类

分类:

  • TCP/IP 通信:可靠的、面向连接的通信方式。
  • UDP 通信:不可靠的、无连接的通信方式。
  • HTTP 通信:基于 TCP/IP 的应用层通信方式。

结论:网络编程主要包含 TCP/IP、UDP 和 HTTP 通信三种类型。

13.3 套接字编程基础

套接字编程是 Java 网络编程的基础。

13.3.1 Socket 与 ServerSocket 的定义

定义:Socket 是用于表示网络连接的对象。ServerSocket 用于表示服务器端的套接字。

常用方法:

  • Socket:getInputStream()、getOutputStream()、close()
  • ServerSocket:accept()、close()

示例:

import java.io.*;
import java.net.*;

// 服务器端
public class TCPServer {
    public static void main(String[] args) {
        try {
            // 创建服务器端套接字
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务器端启动成功,等待客户端连接...");
            // 接受客户端连接
            Socket socket = serverSocket.accept();
            System.out.println("客户端连接成功:" + socket.getInetAddress().getHostAddress());
            // 获取输入流和输出流
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
            // 读取客户端数据
            String message = reader.readLine();
            System.out.println("客户端消息:" + message);
            // 发送响应数据
            writer.println("服务器端已收到消息:" + message);
            // 关闭资源
            reader.close();
            writer.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 客户端
public class TCPClient {
    public static void main(String[] args) {
        try {
            // 创建客户端套接字
            Socket socket = new Socket("localhost", 8888);
            System.out.println("客户端连接成功");
            // 获取输入流和输出流
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
            // 发送数据
            writer.println("Hello, Server!");
            // 读取响应数据
            String response = reader.readLine();
            System.out.println("服务器端响应:" + response);
            // 关闭资源
            reader.close();
            writer.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

输出结果: 服务器端显示连接成功及消息接收,客户端显示响应内容。

结论:Socket 与 ServerSocket 是 Java 网络编程的基础,用于实现客户端与服务器之间的通信。

13.4 TCP/IP 通信的实现

TCP/IP 通信是可靠的、面向连接的通信方式。

13.4.1 服务器端的实现

示例:

import java.io.*;
import java.net.*;

public class TCPServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务器端启动成功,等待客户端连接...");
            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("客户端连接成功:" + socket.getInetAddress().getHostAddress());
                new Thread(() -> {
                    try {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                        PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
                        String message = reader.readLine();
                        System.out.println("客户端消息:" + message);
                        writer.println("服务器端已收到消息:" + message);
                        reader.close();
                        writer.close();
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论:服务器端需创建线程处理客户端请求。

13.4.2 客户端的实现

示例:

import java.io.*;
import java.net.*;

public class TCPClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888);
            System.out.println("客户端连接成功");
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
            writer.println("Hello, Server!");
            String response = reader.readLine();
            System.out.println("服务器端响应:" + response);
            reader.close();
            writer.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论:客户端需与服务器端建立连接并发送数据。

13.5 UDP 通信的实现

UDP 通信是不可靠的、无连接的通信方式。

13.5.1 DatagramSocket 与 DatagramPacket 的定义

定义:DatagramSocket 表示 UDP 套接字,DatagramPacket 表示 UDP 数据包。

常用方法:

  • DatagramSocket:send()、receive()、close()
  • DatagramPacket:getData()、getLength()、getAddress()、getPort()

示例:

import java.io.*;
import java.net.*;

// 服务器端
public class UDPServer {
    public static void main(String[] args) {
        try {
            DatagramSocket socket = new DatagramSocket(8888);
            System.out.println("服务器端启动成功,等待客户端连接...");
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            socket.receive(packet);
            String message = new String(packet.getData(), 0, packet.getLength());
            System.out.println("客户端消息:" + message);
            String response = "服务器端已收到消息:" + message;
            byte[] responseBuffer = response.getBytes();
            DatagramPacket responsePacket = new DatagramPacket(responseBuffer, responseBuffer.length, packet.getAddress(), packet.getPort());
            socket.send(responsePacket);
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 客户端
public class UDPClient {
    public static void main(String[] args) {
        try {
            DatagramSocket socket = new DatagramSocket();
            System.out.println("客户端启动成功");
            String message = "Hello, Server!";
            byte[] buffer = message.getBytes();
            InetAddress address = InetAddress.getByName("localhost");
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 8888);
            socket.send(packet);
            byte[] responseBuffer = new byte[1024];
            DatagramPacket responsePacket = new DatagramPacket(responseBuffer, responseBuffer.length);
            socket.receive(responsePacket);
            String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
            System.out.println("服务器端响应:" + response);
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论:DatagramSocket 与 DatagramPacket 是 Java 中 UDP 通信的基础。

13.6 HTTP 通信的实现

HTTP 通信是基于 TCP/IP 的应用层通信方式。

13.6.1 URL 与 URLConnection 的定义

定义:URL 表示统一资源定位符,URLConnection 表示 URL 连接。

常用方法:

  • URL:openConnection()、getProtocol()、getHost()、getPort()、getPath()
  • URLConnection:getInputStream()、getOutputStream()、setRequestProperty()、getResponseCode()、getResponseMessage()

示例:

import java.io.*;
import java.net.*;

public class HTTPExample {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://www.baidu.com");
            URLConnection connection = url.openConnection();
            connection.setRequestProperty("User-Agent", "Mozilla/5.0");
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuffer response = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            System.out.println("响应数据:" + response.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论:URL 与 URLConnection 是 Java 中 HTTP 通信的基础。

13.7 网络编程的实际应用场景

实际开发中,网络编程广泛应用于文件传输、聊天、爬虫等场景。

示例:文件上传

import java.io.*;
import java.net.*;

// 文件上传服务器端
public class FileUploadServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务器端启动成功,等待客户端连接...");
            Socket socket = serverSocket.accept();
            System.out.println("客户端连接成功:" + socket.getInetAddress().getHostAddress());
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
            FileOutputStream fileOutputStream = new FileOutputStream("uploaded_file.txt");
            String fileName = reader.readLine();
            System.out.println("文件名:" + fileName);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = dataInputStream.read(buffer)) > 0) {
                fileOutputStream.write(buffer, 0, length);
            }
            fileOutputStream.close();
            dataInputStream.close();
            reader.close();
            socket.close();
            serverSocket.close();
            System.out.println("文件上传成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 文件上传客户端
public class FileUploadClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888);
            System.out.println("客户端连接成功");
            PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
            DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
            FileInputStream fileInputStream = new FileInputStream("test.txt");
            String fileName = "test.txt";
            writer.println(fileName);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fileInputStream.read(buffer)) > 0) {
                dataOutputStream.write(buffer, 0, length);
            }
            fileInputStream.close();
            dataOutputStream.close();
            writer.close();
            socket.close();
            System.out.println("文件上传成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论:根据实际问题选择合适的网络编程方法。

总结

本章学习了 Java 网络编程与网络通信基础,包括套接字编程、TCP/IP 通信、UDP 通信、HTTP 通信的实现方法。重点掌握了 Socket、ServerSocket、DatagramSocket、DatagramPacket、URL、URLConnection 等核心类的使用,以及在网络文件传输等实际场景中的应用。

目录

  1. Java 网络编程与网络通信基础
  2. 13.1 学习目标与重点提示
  3. 13.2 网络编程概述
  4. 13.2.1 网络编程的定义
  5. 13.2.2 网络编程的分类
  6. 13.3 套接字编程基础
  7. 13.3.1 Socket 与 ServerSocket 的定义
  8. 13.4 TCP/IP 通信的实现
  9. 13.4.1 服务器端的实现
  10. 13.4.2 客户端的实现
  11. 13.5 UDP 通信的实现
  12. 13.5.1 DatagramSocket 与 DatagramPacket 的定义
  13. 13.6 HTTP 通信的实现
  14. 13.6.1 URL 与 URLConnection 的定义
  15. 13.7 网络编程的实际应用场景
  16. 总结

更多推荐文章

查看全部
  • 通义万相 2.1 API 调用指南:Python 实现图像与文本生成
  • GitHub Copilot 学生认证指南:免费获取 Pro 版权限
  • M2LOrder 服务优化:API 响应压缩与 WebUI 资源懒加载
  • AI 时代内存需求暴涨与能源隐私绿色技术趋势分析
  • Ollama 模型管理与删除指南及 Open-WebUI 部署实战
  • 利用 Higress 将 REST API 快速转换为 MCP Server
  • Whisper 模型下载与版本选择指南
  • Windows 系统升级后无法删除 Windows.old?TrustedInstaller 权限获取指南
  • C++ 二维差分解决矩阵区间更新问题
  • DataX 二进制与源码部署及 DataX-Web 可视化平台搭建
  • 单 OpenClaw 配置多 Agent、多 QQ 与飞书机器人
  • OpenCode 集成 Kimi K2.5 配置与使用指南
  • Stable-Diffusion-3.5 集成 SpringBoot 微服务开发指南
  • Kotaemon:基于 RAG 技术的多语言模型问答系统
  • Mac 连接 VMware Win11 虚拟机文件共享设置
  • Llama-3.2-3B 本地部署:3 步搭建 AI 写作助手
  • 无需 GPU 也能跑:RetinaFace+CurricularFace 轻量级部署实战
  • Sentinel 限流算法
  • Python 环境安装与配置 Pandas 库指南
  • 微服务 OJ 系统实战:基于 Spring Cloud Gateway 的 JWT 认证实现

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online