当前位置:首页 > Java

socket如何使用java

2026-03-25 16:08:36Java

使用Java创建Socket通信

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

服务端实现

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

socket如何使用java

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

socket如何使用java

服务端实现

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

多线程处理多客户端

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

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

注意事项

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

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

分享给朋友:

相关文章

react如何使用axios

react如何使用axios

安装 Axios 在 React 项目中安装 Axios,可以通过 npm 或 yarn 进行安装: npm install axios 或 yarn add axios 导入 Axios 在需要…

react如何使用插槽

react如何使用插槽

使用props.children实现基础插槽 React中插槽的核心是通过props.children传递子组件。父组件在标签内部放置的内容会自动成为children属性: // 父组件 <C…

react如何使用插件

react如何使用插件

使用插件的基本方法 在React项目中使用插件通常涉及安装、导入和集成三个主要环节。以下是具体操作方式: 安装插件通过npm或yarn完成。例如,要安装react-router-dom插件,可以运行…

react 如何使用jquery

react 如何使用jquery

在 React 中使用 jQuery 虽然 React 和 jQuery 的设计理念不同(React 基于组件化,jQuery 直接操作 DOM),但在某些场景下可能需要结合使用。以下是实现方法:…

react中如何使用style

react中如何使用style

在React中使用style React中可以通过内联样式或CSS类名来应用样式。以下是几种常见的方法: 内联样式 内联样式通过JavaScript对象传递,属性名采用驼峰命名法: const d…

react中如何使用jquery

react中如何使用jquery

在React中使用jQuery的方法 在React项目中引入jQuery需要谨慎操作,因为两者都涉及DOM操作,可能导致冲突。以下是具体实现方式: 安装jQuery依赖 通过npm或yarn安装jQ…