温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java网络socket怎么用

发布时间:2026-10-24 07:54:14 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 Java 中,Socket 主要用于网络通信,最常见的是基于 TCP 的 Socket 和 ServerSocket,以及基于 UDP 的 DatagramSocket。下面我用最常用、最基础的 TCP 示例给你讲清楚怎么用。


一、TCP Socket(最常用)

1️⃣ 服务端(Server)

服务端负责监听端口、接收客户端连接。

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

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器启动,等待连接...");

        Socket socket = serverSocket.accept(); // 阻塞,等待客户端
        System.out.println("客户端已连接");

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

        String msg = in.readLine();
        System.out.println("收到客户端消息:" + msg);

        out.println("你好,客户端!");

        socket.close();
        serverSocket.close();
    }
}

2️⃣ 客户端(Client)

客户端负责连接服务器、发送数据。

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

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8888);

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

        out.println("你好,服务器!");

        String response = in.readLine();
        System.out.println("服务器回复:" + response);

        socket.close();
    }
}

✅ 先运行 Server,再运行 Client


二、Socket 常用方法

Socket(客户端 / 已连接端)

socket.getInputStream();   // 接收数据
socket.getOutputStream();  // 发送数据
socket.getPort();          // 端口
socket.getInetAddress();   // IP
socket.close();            // 关闭

ServerSocket(服务端)

serverSocket.accept();     // 等待客户端连接
serverSocket.close();

三、UDP Socket(简单了解)

UDP 是无连接、不可靠但快。

// 发送端
DatagramSocket socket = new DatagramSocket();
byte[] data = "hello".getBytes();
DatagramPacket packet = new DatagramPacket(
        data, data.length, InetAddress.getLocalHost(), 9999);
socket.send(packet);
// 接收端
DatagramSocket socket = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);

四、常见问题

❓ 端口被占用

java.net.BindException: Address already in use

✅ 换端口 / 关掉占用程序

❓ 连接失败

Connection refused

✅ 检查:

  • 服务端是否启动
  • IP / 端口是否正确
  • 防火墙

五、应用场景

  • 聊天程序
  • RPC
  • 游戏通信
  • 物联网设备通信

如果你愿意,我可以:

  • ✅ 给你一个多线程聊天室
  • ✅ 用 NIO(非阻塞)
  • ✅ 讲 HTTP / WebSocket
  • ✅ 结合 Spring Boot

你想学哪一种?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手