Java Websocket客户端库问题:nv Websocket客户端sendBinary

Java Websocket客户端库问题:nv Websocket客户端sendBinary,java,websocket,client,Java,Websocket,Client,当从客户端使用这个库的sendBinary时,我在服务器上得到了所有的0;( 本页要求我添加更多描述,但下面的代码简单明了,应该可以自我解释 客户端代码: private WebSocket connect() throws IOException, WebSocketException { return new WebSocketFactory() .setConnectionTimeout(5000) .createSocket("ws

当从客户端使用这个库的sendBinary时,我在服务器上得到了所有的0;(

本页要求我添加更多描述,但下面的代码简单明了,应该可以自我解释

客户端代码:

private WebSocket connect() throws IOException, WebSocketException {
    return new WebSocketFactory()
            .setConnectionTimeout(5000)
            .createSocket("ws://localhost:8080/testwsapp2/endpoint")
            .addListener(new WebSocketAdapter() {
                public void onBinaryMessage(WebSocket websocket, byte[] message) {

                    String strmsg = new String(message, StandardCharsets.US_ASCII);
                    System.out.println("message from server: " + strmsg);

                    //echo back
                    try {
                        strmsg = "echo: " + strmsg;
                        System.out.println("now echo back with \"" + strmsg + "\"");

                        byte[] bytemsg = strmsg.getBytes("US-ASCII");
                        System.out.println("echo message length = " + bytemsg.length);

                        String a2sview = Arrays.toString(bytemsg);
                        System.out.println("echo message a2sview: " + a2sview);

                        websocket.sendBinary(bytemsg);
                    } catch (Exception ex) {
                        System.out.println(ex.getMessage());
                    }

                }
            })
            .addExtension(WebSocketExtension.PERMESSAGE_DEFLATE)
            .connect();
}
@OnOpen
public void on_open(Session session) {
    try {
        byte[] bytemsg = ("hello client").getBytes("US-ASCII");
        session.getBasicRemote().sendBinary(ByteBuffer.wrap(bytemsg));
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
}

@OnMessage
public void on_message(Session session, ByteBuffer message) {

    byte[] bytemsg = new byte[message.remaining()];
    System.out.println("client message length = " + bytemsg.length);

    String a2sview = Arrays.toString(bytemsg);
    System.out.println("client message a2sview: " + a2sview);

    String strmsg = new String(bytemsg, StandardCharsets.US_ASCII);
    System.out.println("client message: " + strmsg);

}
服务器端代码:

private WebSocket connect() throws IOException, WebSocketException {
    return new WebSocketFactory()
            .setConnectionTimeout(5000)
            .createSocket("ws://localhost:8080/testwsapp2/endpoint")
            .addListener(new WebSocketAdapter() {
                public void onBinaryMessage(WebSocket websocket, byte[] message) {

                    String strmsg = new String(message, StandardCharsets.US_ASCII);
                    System.out.println("message from server: " + strmsg);

                    //echo back
                    try {
                        strmsg = "echo: " + strmsg;
                        System.out.println("now echo back with \"" + strmsg + "\"");

                        byte[] bytemsg = strmsg.getBytes("US-ASCII");
                        System.out.println("echo message length = " + bytemsg.length);

                        String a2sview = Arrays.toString(bytemsg);
                        System.out.println("echo message a2sview: " + a2sview);

                        websocket.sendBinary(bytemsg);
                    } catch (Exception ex) {
                        System.out.println(ex.getMessage());
                    }

                }
            })
            .addExtension(WebSocketExtension.PERMESSAGE_DEFLATE)
            .connect();
}
@OnOpen
public void on_open(Session session) {
    try {
        byte[] bytemsg = ("hello client").getBytes("US-ASCII");
        session.getBasicRemote().sendBinary(ByteBuffer.wrap(bytemsg));
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
}

@OnMessage
public void on_message(Session session, ByteBuffer message) {

    byte[] bytemsg = new byte[message.remaining()];
    System.out.println("client message length = " + bytemsg.length);

    String a2sview = Arrays.toString(bytemsg);
    System.out.println("client message a2sview: " + a2sview);

    String strmsg = new String(bytemsg, StandardCharsets.US_ASCII);
    System.out.println("client message: " + strmsg);

}
客户端输出:

message from server: hello client
now echo back with "echo: hello client"
echo message length = 18
echo message a2sview: [101, 99, 104, 111, 58, 32, 104, 101, 108, 108, 111, 32, 99, 108, 105, 101, 110, 116]
服务器输出

Info:   client message length = 18
Info:   client message a2sview: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Info:   client message:

非常感谢您的帮助。

在服务器端的
on_message
方法中,您必须将
message
的内容复制到
bytemsg
中,然后才能将
bytemsg
传递到
数组。toString

byte[]bytemsg=新字节[message.remaining()];
System.out.println(“客户端消息长度=“+bytemsg.length”);
//!!!将“消息”的内容复制到此处的“bytemsg”!!!
字符串a2sview=Arrays.toString(bytemsg);
System.out.println(“客户端消息a2sview:+a2sview”);

在服务器端的
on_message
方法中,在将
bytemsg
传递到
数组之前,必须将
message
的内容复制到
bytemsg

byte[]bytemsg=新字节[message.remaining()];
System.out.println(“客户端消息长度=“+bytemsg.length”);
//!!!将“消息”的内容复制到此处的“bytemsg”!!!
字符串a2sview=Arrays.toString(bytemsg);
System.out.println(“客户端消息a2sview:+a2sview”);

I git克隆了nv websocket客户端源代码,并怀疑操作“int b=(有效负载[I]^maskingKey[I%4])&0xFF在WebSocketOutputStream.java的第136行。有人可以帮助和检查吗?我收到了川崎高彦自己的电子邮件回复,其中有一个测试代码,在使用ws://echo.websocket.org进行测试时一切正常。所以服务器端的代码一定有问题。P.S.server=glassfish4.1.1,platform=centos7I git克隆了nv websocket客户端源代码和非常可疑的操作“int b=(有效负载[i]^maskingKey[i%4])&0xFF在WebSocketOutputStream.java的第136行。有人可以帮助和检查吗?我收到了川崎高彦自己的电子邮件回复,其中有一个测试代码,在使用ws://echo.websocket.org进行测试时一切正常。所以服务器端的代码一定有问题。P.S.server=glassfish4.1.1,platform=centos7再次非常感谢高彦。你是对的,它成功了;-)我真的应该更详细地阅读原始Java文档,但现在我只想匆忙完成一些事情。感谢您之前的电子邮件和回复。再次非常感谢高彦。你说得对,它成功了;-)我真的应该更详细地阅读原始Java文档,但现在我只想匆忙完成一些事情。感谢您之前的电子邮件,并在此处回复。