websockets example crear java tomcat websocket

example - Cliente Websocket simple en Java-Problema de conexión



websocket java tomcat 8 example (1)

Encontré el problema: era que la dirección ws requería un ''/'' al final cuando se ejecutaba desde un cliente Java.

JavaScript ws: //192.168.0.25: 9000

Java ws: //192.168.0.25: 9000 /

No estoy seguro de por qué esto es necesario en Java, pero resolvió el problema ...

Intento escribir un cliente simple de websocket en Java para conectarme a un servidor WebSocket de un tercero (no tengo acceso al servidor).

Puedo conectarme y comunicarme con el servidor websocket usando javascript en un navegador, pero cuando intento hacer lo mismo con un cliente Java, no puedo conectarme.

Con el mismo cliente de Java puedo conectarme a un servidor tomcat websocket que tengo en ejecución, así que creo que es una especie de problema de compatibilidad entre el cliente y el servidor. (Estoy usando las bibliotecas Tomcat 7.0.56 para el cliente websocket).

Este es el error que recibo ...

Error

javax.websocket.DeploymentException: The HTTP request to initiate the WebSocket connection failed at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:344) at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:166) at com.cvr.instant.ws.WebSocketClient.Connect(WebSocketClient.java:44) at com.cvr.instant.ws.TestWS.Start(TestWS.java:17) at com.cvr.instant.ws.TestWS.main(TestWS.java:37) Caused by: java.io.EOFException at org.apache.tomcat.websocket.WsWebSocketContainer.processResponse(WsWebSocketContainer.java:595) at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:317) ... 4 more

WebSocketClient

import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import javax.websocket.ClientEndpoint; import javax.websocket.CloseReason; import javax.websocket.ContainerProvider; import javax.websocket.DeploymentException; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.WebSocketContainer; @ClientEndpoint public class WebSocketClient { protected WebSocketContainer container; protected Session userSession = null; public WebSocketClient() { container = ContainerProvider.getWebSocketContainer(); } public void Connect(String sServer) { try { userSession = container.connectToServer(this, new URI(sServer)); } catch (DeploymentException | URISyntaxException | IOException e) { e.printStackTrace(); } } public void SendMessage(String sMsg) throws IOException { userSession.getBasicRemote().sendText(sMsg); } @OnOpen public void onOpen(Session session) { System.out.println("Connected"); } @OnClose public void onClose(Session session, CloseReason closeReason) { } @OnMessage public void onMessage(Session session, String msg) { System.out.println(msg); } public void Disconnect() throws IOException { userSession.close(); } }

Ejecutando el cliente

import java.io.IOException; public class TestWS { public WebSocketClient wsc; public TestWS() { } public void Start() throws InterruptedException, IOException { wsc = new WebSocketClient(); wsc.callback = this; wsc.Connect("ws://192.168.0.25:9000"); Thread.sleep(1000); wsc.Disconnect(); } public static void main(String[] args) throws InterruptedException, IOException { TestWS t = new TestWS(); t.Start(); Thread.sleep(1000); } }

Soy muy nuevo en los clientes de websocket (y bastante nuevo en websockets en general). ¡Cualquier ayuda que puedas dar será apreciada!