Estoy tratando de leer el valor recibido de JavaScript WebSocket usando Java. Tengo este código JavaScript:
const socket = new WebSocket("wss://localhost:7999"); // start socket.addEventListener("open", (event) => { socket.send("Hello!"); }); socket.addEventListener("message", (event) => { console.log("Received message."); });
Y este código Java:
import java.io.*; import java.net.*; class Server { public static void main(String[] args) throws Exception { ServerSocket s = new ServerSocket(7999); Socket client = s.accept(); System.out.println("I am in!"); InputStream inputStream = client.getInputStream(); InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8"); BufferedReader in = new BufferedReader(reader); String readLine; while ((readLine = in.readLine()) != null) { System.out.println(readLine); } } }
Sin embargo, al iniciar el servidor y el código del cliente, recibo este valor:
I am in! ��� �.isֿ���pO?��-4/P�P����- ���Q�`�:���x���wG�Z��x��v�##�6���,�+̩�0�/̨�$�#� � �(�'����=<5/� }�� localhost� ��http/1.1 3+)�� �-lh������ۥ n�}�>�zUZ�Ğ�-+
Mi objetivo es leer el valor Hello
, que he enviado usando socket.send
. ¿Alguien sabe cómo arreglar este problema? Gracias.
ServerSocket
es una construcción de nivel bastante bajo para manejar conexiones TCP. Websocket, aunque comienza como una solicitud HTTP, requiere que el servidor solicite una actualización de la conexión, hay un protocolo de enlace y luego se manejan los marcos de websocket, incluidos algunos marcos internos como ping/pong. A menos que planee implementar toda esa funcionalidad, le sugiero que no use ServerSocket
sin procesar, sino que use una biblioteca que brinde soporte de websocket listo para usar.
Algunas opciones que te podría indicar son: