温馨提示×

温馨提示×

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

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

如何创建java Socket套接字

发布时间:2026-10-10 15:35:04 来源:亿速云 阅读:84 作者:小樊 栏目:编程语言

在 Java 中,使用 Socket 可以实现网络通信。通常分为客户端 Socket 和服务端 ServerSocket。下面从基础概念到示例一步步说明。


一、基本概念

  • ServerSocket:服务端监听端口,等待客户端连接
  • Socket:客户端连接服务端,或服务端接受连接后的通信通道
  • 通信基于 IP + 端口
  • 底层是 TCP(可靠连接)

二、服务端创建步骤

1️⃣ 创建 ServerSocket

ServerSocket serverSocket = new ServerSocket(8888);
  • 8888 是监听端口
  • 端口范围:1024 ~ 65535(避免系统端口)

2️⃣ 等待客户端连接

Socket socket = serverSocket.accept();
  • accept() 是阻塞方法
  • 有客户端连接后才继续执行

3️⃣ 获取输入输出流

BufferedReader in = new BufferedReader(
        new InputStreamReader(socket.getInputStream()));

PrintWriter out = new PrintWriter(
        socket.getOutputStream(), true);

4️⃣ 通信示例

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

5️⃣ 关闭资源

socket.close();
serverServerSocket.close();

三、客户端创建步骤

1️⃣ 创建 Socket 连接

Socket socket = new Socket("127.0.0.1", 8888);
  • 127.0.0.1 是本地 IP
  • 8888 是服务端端口

2️⃣ 获取流

PrintWriter out = new PrintWriter(
        socket.getOutputStream(), true);

BufferedReader in = new BufferedReader(
        new InputStreamReader(socket.getInputStream()));

3️⃣ 发送和接收

out.println("你好,服务端");
String response = in.readLine();
System.out.println("服务端说:" + response);

4️⃣ 关闭

socket.close();

四、完整简单示例

服务端

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

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8888);
        System.out.println("服务端启动");
        Socket socket = server.accept();
        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();
        server.close();
    }
}

客户端

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

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 8888);
        PrintWriter out = new PrintWriter(
                socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
        out.println("你好");
        System.out.println("服务端:" + in.readLine());
        socket.close();
    }
}

五、常见问题

✅ 端口被占用

java.net.BindException: Address already in use

→ 换端口或关闭占用程序

✅ 连接失败

java.net.ConnectException

→ IP/端口错误,或服务端未启动

✅ 中文乱码 → 使用 InputStreamReader(socket.getInputStream(), "UTF-8")


六、进阶方向(可选)

  • 多线程服务端(一个客户端一个线程)
  • NIO(非阻塞 Socket)
  • SSLSocket(加密通信)
  • Netty 框架

如果你愿意,我可以:

  • 给你一个 多线程聊天室示例
  • 教你 Socket 和 HTTP 的区别
  • 用 NIO 改写 Socket

你想学哪一种?

向AI问一下细节

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

AI
助
手