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!