2017-09-21 1 views
0

Ich habe diese code verwendet, um den Websocket-Client in Java zu schreiben. Es ist eine sichere Steckdose. Die Verbindung zum Ziel wird hergestellt, aber onMessage wird nicht aufgerufen.Java WebSocket: onMessage wird nicht ausgelöst

Wenn ich die gleiche Sache in Java Script schreibe es funktioniert und in der Lage, Antwort zu bekommen.

Bitte überprüfen Sie meinen Code und beraten, was ich hier vermisse.

Mein Code:

@ClientEndpoint 
public class MyClientEndpoint { 
    @SuppressWarnings("unchecked") 

    @OnOpen 
    public void onOpen(Session session) { 
     System.out.println("Connected to endpoint: " + session.getBasicRemote()); 
     try { 
      JSONObject obj = new JSONObject(); 
      obj.put("subscribe", URLEncoder.encode("xxxxxxx","UTF-8")); 
      String msg = obj.toJSONString(); 
      System.out.println("Sending message to endpoint: " + msg); 
      session.getBasicRemote().sendText(msg); 
     } catch (Exception ex) { 
      Logger.getLogger(MyClientEndpoint.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    @OnMessage 
    public void onMessage(String message) { 
    System.out.println("Received message in client: " + message); 
     Client.messageLatch.countDown(); 
    } 



public class Client { 

    final static CountDownLatch messageLatch = new CountDownLatch(1); 

    public static void main(String[] args) { 
     try { 
     WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
      String uri = "wss://api....."; 
      System.out.println("Connecting to:: " + uri); 
      container.connectToServer(MyClientEndpoint.class, URI.create(uri)); 
      messageLatch.await(10, TimeUnit.SECONDS);    
     } catch (DeploymentException | InterruptedException | IOException ex) { 
      Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
+0

Sie können in Ihrem '@ OnMessage' die' Session session' Argument fehlen. Die Signatur sollte 'public void myMethod (Sitzungssitzung, String-Nachricht) sein;' – Al1

+0

Mit Sitzungssitzung als erstes Argument der Methode versucht, funktioniert aber immer noch nicht. –

Antwort

0

Ich bin in der Lage zu verbinden websocket indem Anmeldeinformationen in sichern

ClientEndpointConfig.Configurator configurator = new ClientEndpointConfig.Configurator() { 
      public void beforeRequest(Map<String, List<String>> headers) { 
      String credentials = "username:password"; 
      headers.put("Authorization", Arrays.asList("Basic " + new BASE64Encoder().encode(credentials.getBytes()))); 
       System.out.println("Header set successfully"); 
      } 
     }; 

     ClientEndpointConfig clientConfig = ClientEndpointConfig.Builder.create() 
       .configurator(configurator) 
       .build(); 

ich die Schritte in dem folgenden Link dokumentiert.

https://bigdatatechbytes.blogspot.in/2017/10/java-client-for-secure-web-socket.html

Verwandte Themen