Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WebSocket:onMessage未被触发_Java_Websocket_Java Websocket - Fatal编程技术网

Java WebSocket:onMessage未被触发

Java WebSocket:onMessage未被触发,java,websocket,java-websocket,Java,Websocket,Java Websocket,我用它用java编写了websocket客户端。这是一个安全的插座。已建立到目标的连接,但未调用onMessage 当我用java脚本编写同样的东西时,它工作正常并且能够得到响应 请检查我的代码,并告知我遗漏了什么 我的代码: @ClientEndpoint public class MyClientEndpoint { @SuppressWarnings("unchecked") @OnOpen public void onOpen(Session session)

我用它用java编写了websocket客户端。这是一个安全的插座。已建立到目标的连接,但未调用onMessage

当我用java脚本编写同样的东西时,它工作正常并且能够得到响应

请检查我的代码,并告知我遗漏了什么

我的代码:

@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);
        }
    }
}

我可以通过传入凭据连接到安全websocket

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();
ClientEndpointConfig.Configurator Configurator=new ClientEndpointConfig.Configurator(){
请求前公共无效(映射头){
String-credentials=“用户名:密码”;
headers.put(“Authorization”、Arrays.asList(“Basic”+新的BASE64Encoder().encode(credentials.getBytes()));
System.out.println(“标题设置成功”);
}
};
ClientEndpointConfig clientConfig=ClientEndpointConfig.Builder.create()
.配置器(配置器)
.build();
我在下面的链接中记录了这些步骤


通过传入凭据,我可以连接到安全websocket

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();
ClientEndpointConfig.Configurator Configurator=new ClientEndpointConfig.Configurator(){
请求前公共无效(映射头){
String-credentials=“用户名:密码”;
headers.put(“Authorization”、Arrays.asList(“Basic”+新的BASE64Encoder().encode(credentials.getBytes()));
System.out.println(“标题设置成功”);
}
};
ClientEndpointConfig clientConfig=ClientEndpointConfig.Builder.create()
.配置器(配置器)
.build();
我在下面的链接中记录了这些步骤


您的
@OnMessage
中可能缺少
会话
参数。签名应为
public void myMethod(会话、字符串消息)
尝试将Session Session作为方法的第一个参数,但它仍然不起作用。您的
@OnMessage
中可能缺少
Session Session
参数。签名应为
public void myMethod(会话、字符串消息)
尝试将Session作为该方法的第一个参数,但仍然无效。