Tengo un servidor de socket existente que escucha en el puerto 6868 . Está escrito en Java.
Necesito conectar un cliente al servidor. El cliente está codificado en Javascript en mi aplicación React.
He probado casi todas las combinaciones posibles de tutoriales que he encontrado en Internet, pero aún no logro que el cliente se conecte.
import * as io from "socket.io-client"; export default () => { // eslint-disable-next-line no-restricted-globals self.onmessage = (message) => { const data = message.data; try { var socket = io("http://localhost:6868/"); } catch (error) { console.log("do nothing: " + error); } }; }; Pase lo que pase, recibo el mismo error: ReferenceError: socket_io_client__WEBPACK_IMPORTED_MODULE_0___default is not defined .
Esta es la versión que estoy usando como se ve en package.json : "socket.io-client": "^4.4.0"
Lo instalé con este comando: npm i socket.io-client
Resulta que socket.io no se puede usar para conectarse al ServerSocket que tengo en Java. Para solucionar esto, cambié ServerSocket para que sea un WebSocketServer .
Aquí está todo el código necesario para hacer que Java WebSocket se conecte con el cliente de JavaScript:
WebsocketServer.java
import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import java.net.InetSocketAddress; import java.util.HashSet; import java.util.Set; public class WebsocketServer extends WebSocketServer { private static int TCP_PORT = 6868; private static Set<WebSocket> conns; public WebsocketServer() { super(new InetSocketAddress(TCP_PORT)); conns = new HashSet<>(); } @Override public void onOpen(WebSocket conn, ClientHandshake handshake) { conns.add(conn); conn.send("hello!!"); System.out.println("New connection from " + conn.getRemoteSocketAddress().getAddress().getHostAddress()); } @Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { conns.remove(conn); System.out.println("Closed connection to " + conn.getRemoteSocketAddress().getAddress().getHostAddress()); } @Override public void onMessage(WebSocket conn, String message) { System.out.println("Message from client: " + message); for (WebSocket sock : conns) { sock.send("SENDING BACK" + message); } } @Override public void onError(WebSocket conn, Exception ex) { //ex.printStackTrace(); if (conn != null) { conns.remove(conn); // do some thing if required } System.out.println("ERROR from " + conn.getRemoteSocketAddress().getAddress().getHostAddress()); } public static Set<WebSocket> getConns() { return conns; } } E inicie el servidor desde main() con el new WebsocketServer().start();
cliente.js
var connection = new WebSocket("ws://127.0.0.1:6868"); connection.onopen = function () { console.log("Connected!"); connection.send("Ping"); // Send the message 'Ping' to the server }; // Log errors connection.onerror = function (error) { console.log("WebSocket Error " + error); }; // Log messages from the server connection.onmessage = function (e) { console.log("Server: " + e.data); };Y la dependencia para Java Web Socket:
<dependency> <groupId> org.java-websocket </groupId> <artifactId> Java-WebSocket </artifactId> <version> 1.3.0 </version> </dependency>