Java Socket编程入门:原理与实现

唐可
唐可
发布时间:2026-10-14| 4人浏览过
原创

Socket(套接字)是IP地址与端口的组合句柄,用于应用程序向网络发起或应答请求。本文将重点解析Java环境下基于TCP协议的Socket通信原理,并提供可运行的服务端与客户端示例代码。

核心概念与关键方法

在Java中操作Socket,主要依赖以下三个核心方法构建双向通信:

  • accept():主要用于服务器端产生“阻塞”,等待客户端的连接请求。该方法一旦捕获到连接,将返回一个对应的Socket实例,用于后续与该特定客户端的数据交换。
  • getInputStream():获取网络连接输入流,返回InputStream对象实例,用于接收对端发送的数据。
  • getOutputStream():与输入流相反,获取输出流,用于向对端发送数据。

一般建立流程

建立Java Socket连接通常需要明确服务器端和客户端的角色分工:

  1. 服务器端:使用ServerSocket监听指定端口,调用accept()等待客户端请求。连接成功后开始会话,完成交互后关闭连接。注意,通常由服务器端负责主导连接的关闭流程。
  2. 客户端:使用Socket对象针对服务器的IP地址和端口发起链接请求。连接成功后进入会话阶段,传输数据完毕后关闭Socket。

示例代码:完整实现

第1步:配置服务器端(Server)

目的:创建一个能够监听指定端口并处理单次请求的服务程序。

入口与动作:初始化ServerSocket绑定端口(如10000),调用accept()阻塞等待。随后初始化输入输出流进行数据收发。

复制代码 代码如下:
package com.icer.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Server
 *
 * @author Icer
 */
public class Server {
    private ServerSocket ss;
    private Socket s;
    private BufferedReader br;
    private PrintWriter pw;

    public Server() {
        try {
            ss = new ServerSocket(10000);
            System.out.println("Server is starting...");
            // 阻塞等待,直到有客户端连接
            s = ss.accept();
            // 获取输入流,用于接收客户端消息
            br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            // 获取输出流,自动刷新以便立即发送
            pw = new PrintWriter(s.getOutputStream(), true);
            
            // 读取客户端发送的一行文本
            String line = br.readLine();
            System.out.println(line);
            
            // 回复客户端
            pw.println("your word is:" + line);
            // pw.println("helloworld");
            
            // 清理资源
            br.close();
            pw.close();
        } catch (IOException ie) {
            ie.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        new Server();
    }
}

第2步:配置客户端(Client)

目的:主动连接到服务器,发送请求并接收响应。

入口与动作:实例化Socket指定目标IP(如127.0.0.1)和端口。获取输出流向服务器发送字符串,通过输入流读取服务器回显的数据。

复制代码 代码如下:
package com.icer.client;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * Client
 * @author Icer
 */
public class Client {
    private Socket s;
    private BufferedReader br;
    // private BufferedReader line;
    private PrintWriter pw;
    private String line = "";

    public Client() {
        try {
            // 尝试连接本地10000端口
            s = new Socket("127.0.0.1", 10000);
            // 获取输出流发送数据
            pw = new PrintWriter(s.getOutputStream(), true);
            // 获取输入流接收响应
            br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            
            // 向服务器发送数据
            pw.println("hello");
            // 读取服务器的回显
            line = br.readLine();
            System.out.println(line);

            // 清理资源
            br.close();
            pw.close();
        } catch (IOException ie) {
            ie.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        new Client();
    }
}

以上就是Java Socket编程入门的原理与代码实现的详细内容,更多关于Java网络通信技术资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。