当前位置:首页 > Java > 正文

Java TCP/IP套接字编程详解(零基础入门Socket通信教程)

在现代软件开发中,Java TCP/IP套接字编程是实现网络通信的基础技能之一。无论你是想开发聊天应用、远程控制工具,还是构建分布式系统,掌握Socket通信都是必不可少的。本教程将带你从零开始,一步步理解并编写Java网络编程入门级别的TCP客户端与服务器程序。

Java TCP/IP套接字编程详解(零基础入门Socket通信教程) TCP/IP套接字编程 Java网络编程入门 Socket通信教程 Socket示例代码 第1张

什么是TCP/IP套接字?

套接字(Socket)是网络通信的端点,它允许两个程序通过网络进行数据交换。在Java Socket示例代码中,我们通常使用java.net.Socket(客户端)和java.net.ServerSocket(服务器)类来实现基于TCP协议的可靠连接。

TCP(传输控制协议)是一种面向连接的协议,确保数据按顺序、无差错地传输。这使得它非常适合需要高可靠性的应用场景。

第一步:编写服务器端程序

服务器的作用是监听特定端口,等待客户端连接,并处理传入的数据。以下是一个简单的回显服务器(Echo Server):

import java.io.*;import java.net.*;public class EchoServer {    public static void main(String[] args) {        try (ServerSocket serverSocket = new ServerSocket(8080)) {            System.out.println("服务器已启动,监听端口 8080...");            while (true) {                Socket clientSocket = serverSocket.accept();                System.out.println("新客户端连接:" + clientSocket.getInetAddress());                // 启动新线程处理每个客户端                new Thread(() -> handleClient(clientSocket)).start();            }        } catch (IOException e) {            e.printStackTrace();        }    }    private static void handleClient(Socket socket) {        try (            BufferedReader in = new BufferedReader(                new InputStreamReader(socket.getInputStream())            );            PrintWriter out = new PrintWriter(socket.getOutputStream(), true)        ) {            String inputLine;            while ((inputLine = in.readLine()) != null) {                System.out.println("收到消息: " + inputLine);                out.println("服务器回显: " + inputLine); // 回显给客户端            }        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

第二步:编写客户端程序

客户端负责连接到服务器,并发送/接收数据。以下是对应的客户端代码:

import java.io.*;import java.net.*;public class EchoClient {    public static void main(String[] args) {        try (            Socket socket = new Socket("localhost", 8080);            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);            BufferedReader in = new BufferedReader(                new InputStreamReader(socket.getInputStream())            )        ) {            System.out.println("已连接到服务器。输入消息(输入'exit'退出):");            String userInput;            while ((userInput = stdIn.readLine()) != null) {                out.println(userInput);                if ("exit".equalsIgnoreCase(userInput)) {                    break;                }                System.out.println("服务器回复: " + in.readLine());            }        } catch (IOException e) {            System.err.println("连接失败: " + e.getMessage());        }    }}

如何运行这个程序?

  1. 将服务器代码保存为 EchoServer.java,客户端代码保存为 EchoClient.java
  2. 打开终端,编译两个文件:
    javac EchoServer.java EchoClient.java
  3. 先运行服务器:
    java EchoServer
  4. 再打开另一个终端窗口,运行客户端:
    java EchoClient
  5. 在客户端输入任意文本,服务器会将其原样返回。

关键知识点总结

  • ServerSocket 用于监听端口,accept() 方法阻塞等待客户端连接。
  • 每个客户端连接应由独立线程处理,以支持多用户并发(如本例所示)。
  • 使用 try-with-resources 自动关闭流和套接字,避免资源泄漏。
  • 本地测试时,服务器地址使用 localhost127.0.0.1

进阶建议

当你掌握了这个基础的Socket通信教程后,可以尝试:

  • 添加异常处理和日志记录
  • 使用对象序列化传输复杂数据
  • 改用 NIO(非阻塞 I/O)提升性能
  • 实现心跳机制维持长连接

希望这篇教程能帮助你顺利开启Java TCP/IP套接字编程之旅!如有疑问,欢迎在评论区交流。