当前位置:首页 > Java

socket如何使用java

2026-03-25 16:08:36Java

使用Java创建Socket通信

Java提供了java.net.Socketjava.net.ServerSocket类来实现TCP协议的网络通信。以下分客户端和服务端两部分说明。

服务端实现

创建ServerSocket监听指定端口,等待客户端连接:

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

public class Server {
    public static void main(String[] args) throws IOException {
        int port = 8080;
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("服务端启动,监听端口:" + port);

        Socket clientSocket = serverSocket.accept();
        System.out.println("客户端连接:" + clientSocket.getInetAddress());

        BufferedReader in = new BufferedReader(
            new InputStreamReader(clientSocket.getInputStream()));
        PrintWriter out = new PrintWriter(
            clientSocket.getOutputStream(), true);

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println("收到客户端消息:" + inputLine);
            out.println("服务端回复:" + inputLine);
        }
    }
}

客户端实现

创建Socket连接到服务端,进行数据交换:

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

public class Client {
    public static void main(String[] args) throws IOException {
        String host = "localhost";
        int port = 8080;

        Socket socket = new Socket(host, port);
        PrintWriter out = new PrintWriter(
            socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
            new InputStreamReader(socket.getInputStream()));

        BufferedReader stdIn = new BufferedReader(
            new InputStreamReader(System.in));
        String userInput;
        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            System.out.println("收到服务端回复:" + in.readLine());
        }
    }
}

UDP通信实现

对于UDP协议,使用DatagramSocketDatagramPacket

服务端实现

import java.net.*;

public class UDPServer {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(9876);
        byte[] buffer = new byte[1024];

        while (true) {
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            socket.receive(packet);
            String received = new String(packet.getData(), 0, packet.getLength());
            System.out.println("收到UDP消息:" + received);
        }
    }
}

客户端实现

import java.net.*;

public class UDPClient {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket();
        byte[] buf = "Hello UDP".getBytes();

        InetAddress address = InetAddress.getByName("localhost");
        DatagramPacket packet = new DatagramPacket(
            buf, buf.length, address, 9876);
        socket.send(packet);
    }
}

异常处理与资源释放

网络通信需要处理IOException并确保资源正确释放:

try (Socket socket = new Socket(host, port);
     OutputStream out = socket.getOutputStream();
     InputStream in = socket.getInputStream()) {
    // 通信逻辑
} catch (IOException e) {
    e.printStackTrace();
}

多线程处理多客户端

服务端通常需要多线程处理并发连接:

socket如何使用java

while (true) {
    Socket clientSocket = serverSocket.accept();
    new Thread(() -> {
        try {
            // 处理客户端请求
        } catch (IOException e) {
            e.printStackTrace();
        }
    }).start();
}

注意事项

  • 端口号范围应在1024-65535之间
  • 通信双方需约定好数据格式(如文本/二进制)
  • 生产环境需要添加超时设置:socket.setSoTimeout(3000)
  • 大数据传输建议使用缓冲流

以上代码展示了Java Socket编程的基础用法,实际开发中可根据需求扩展功能,如添加协议封装、心跳检测等机制。

分享给朋友:

相关文章

java如何使用

java如何使用

Java 基本使用方法 Java 是一种广泛使用的编程语言,适用于开发各种类型的应用程序。以下是 Java 的基本使用方法,包括环境配置、语法基础和常用操作。 安装 Java 开发环境 下载并安装…

react如何使用jquery

react如何使用jquery

在 React 中使用 jQuery React 和 jQuery 的设计理念不同,React 基于虚拟 DOM 和数据驱动,而 jQuery 直接操作真实 DOM。若需在 React 中整合 jQu…

react ref 如何使用

react ref 如何使用

React Refs 的基本概念 Refs 提供了一种方式,允许直接访问 DOM 节点或在 React 组件中创建的实例。主要用于需要直接操作 DOM 或访问组件内部状态的场景,比如聚焦输入框、触发动…

react如何使用npm包

react如何使用npm包

安装 npm 包 在 React 项目中使用 npm 包前,需要先安装该包。通过 npm 或 yarn 安装包时,运行以下命令: npm install package-name 或 yarn a…

React的isMounted如何使用

React的isMounted如何使用

isMounted的使用方法 React的isMounted方法曾用于检查组件是否已挂载到DOM中,但该方法已被弃用。官方推荐使用其他方式替代。 替代方案 使用useRef和useEffect组合实…

react如何使用link跳转

react如何使用link跳转

使用 React Router 的 Link 组件 在 React 应用中实现页面跳转,通常使用 react-router-dom 库提供的 Link 组件。Link 组件允许在不刷新页面的情况下进行…