已通过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
相关产品推荐
相关产品推荐

