You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已通过Chrome测试WebSocket,如何用Java实现访问并打印响应?

Java实现WebSocket客户端(对应JS示例功能)

下面提供两种常用的Java实现方案,实现你给出的JS代码功能:连接指定WebSocket服务端,接收消息并打印。


方案一:Java 11+原生WebSocket API

JDK 11及以上版本自带了WebSocket客户端API,无需额外依赖:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.WebSocket;
import java.util.concurrent.CompletionStage;

public class NativeWebSocketClient {
    public static void main(String[] args) {
        // 替换为你的WebSocket地址
        String wsUrl = "ws://address:port";

        HttpClient client = HttpClient.newHttpClient();
        WebSocket webSocket = client.newWebSocketBuilder()
                .buildAsync(URI.create(wsUrl), new WebSocket.Listener() {
                    // 接收消息时触发,对应JS的onmessage
                    @Override
                    public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
                        System.out.println("收到消息: " + data);
                        return WebSocket.Listener.super.onText(webSocket, data, last);
                    }

                    @Override
                    public void onOpen(WebSocket webSocket) {
                        System.out.println("WebSocket连接已建立");
                        WebSocket.Listener.super.onOpen(webSocket);
                    }

                    @Override
                    public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) {
                        System.out.println("WebSocket连接关闭,状态码: " + statusCode + ", 原因: " + reason);
                        return WebSocket.Listener.super.onClose(webSocket, statusCode, reason);
                    }

                    @Override
                    public void onError(WebSocket webSocket, Throwable error) {
                        System.err.println("WebSocket发生错误: " + error.getMessage());
                        WebSocket.Listener.super.onError(webSocket, error);
                    }
                })
                .join();

        // 保持主线程存活,避免程序退出
        try {
            Thread.currentThread().join();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

方案二:使用OkHttp库

OkHttp是常用的HTTP客户端库,WebSocket实现简洁易用,需先引入依赖:

Maven依赖

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version> <!-- 使用最新稳定版即可 -->
</dependency>

客户端代码

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
import okio.ByteString;

public class OkHttpWebSocketClient {
    public static void main(String[] args) {
        String wsUrl = "ws://address:port";

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder().url(wsUrl).build();
        WebSocketListener listener = new WebSocketListener() {
            // 对应JS的onmessage
            @Override
            public void onMessage(WebSocket webSocket, String text) {
                System.out.println("收到消息: " + text);
            }

            @Override
            public void onMessage(WebSocket webSocket, ByteString bytes) {
                // 处理二进制消息,如果服务端有发送的话
                System.out.println("收到二进制消息: " + bytes.hex());
            }

            @Override
            public void onOpen(WebSocket webSocket, okhttp3.Response response) {
                System.out.println("WebSocket连接已建立");
            }

            @Override
            public void onClosed(WebSocket webSocket, int code, String reason) {
                System.out.println("WebSocket连接关闭,状态码: " + code + ", 原因: " + reason);
            }

            @Override
            public void onFailure(WebSocket webSocket, Throwable t, okhttp3.Response response) {
                System.err.println("WebSocket发生错误: " + t.getMessage());
            }
        };

        WebSocket webSocket = client.newWebSocket(request, listener);

        // 保持主线程存活
        try {
            Thread.currentThread().join();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

内容的提问来源于stack exchange,提问作者Alessandro Provenzano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:15:33