WebSocket通信:javascript和java类之间的通信

WebSocket通信:javascript和java类之间的通信,javascript,java,websocket,bytebuffer,arraybuffer,Javascript,Java,Websocket,Bytebuffer,Arraybuffer,我的要求如下 步骤1 建立WebSocket通信-->完成 将数据从客户端发送到服务器-->完成 从服务器到客户端接收数据-->完成 步骤2 建立WebSocket通信-->完成 将字符串数据从客户端[jsp/javascript]发送到服务器 javascript上的字符串-->ArrayBuffer-->完成 在Bytebuffer-->完成的@ServerEndpoint java类上接收数据 如何将相同的数据发送回浏览器--> 如何将数据转换为字符串--> Java类 @Server

我的要求如下

步骤1

  • 建立WebSocket通信-->完成
  • 将数据从客户端发送到服务器-->完成
  • 从服务器到客户端接收数据-->完成
  • 步骤2

  • 建立WebSocket通信-->完成
  • 将字符串数据从客户端[jsp/javascript]发送到服务器
  • javascript上的字符串-->ArrayBuffer-->完成
  • 在Bytebuffer-->完成的@ServerEndpoint java类上接收数据
  • 如何将相同的数据发送回浏览器-->
  • 如何将数据转换为字符串-->

  • Java类

     @ServerEndpoint("/testwebsocket")
     public class WebSocketTest {
    
    @OnMessage
    public void onMessage(ByteBuffer bytedata, Session session) throws IOException, InterruptedException {
    
        //session.getBasicRemote().sendText("replay from server for :" + bytedata);
    
        System.out.println("echoBinary: " + bytedata);
        String v = new String(bytedata.array(), "UTF-8");
        for (byte b : bytedata.array()) {
            System.out.print(b);
        }
        session.getBasicRemote().sendBinary(bytedata);
    }
    
    接收的Javascript代码

    function onMessage(event) {
    
    
    if (event.data instanceof ArrayBuffer){
    
        alert("onMessage if ");
        var strReceived = String.fromCharCode.apply(null, new Uint16Array(event.data));
        document.getElementById('messages').innerHTML += '<br />' + 'receieved' + event;
    }
    else
    {
        alert("onMessage else ");
        document.getElementById('messages').innerHTML += '<br />' + event.data;
    }   }
    
    消息(事件)上的函数{ if(ArrayBuffer的event.data实例){ 警报(“onMessage if”); var strReceived=String.fromCharCode.apply(null,新Uint16Array(event.data)); document.getElementById('messages').innerHTML+='
    '+'received'+事件; } 其他的 { 警报(“onMessage else”); document.getElementById('messages').innerHTML+='
    '+event.data; } } 用于发送的Javascript代码

    //sending arraybuffer
    function bytedata() {
    
    //alert('I am in bytedata');
    var str = document.getElementById('bytedataTextFeild').value;
    var arrayByte = str2ab(str);
    websocket.send(arrayByte);
    return false;
    }
    
    //creating arraybuffer from string
    function str2ab(str) {
    //alert('I am in str2ab ' + str);  
    var buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char
    var bufView = new Uint16Array(buf);
    for (var i = 0, strLen = str.length; i < strLen; i++) {
        bufView[i] = str.charCodeAt(i);
        document.getElementById('messages').innerHTML += '<br />'
                + str.charCodeAt(i);
    }
    return buf;
    
    }
    
    //发送arraybuffer
    函数bytedata(){
    //警惕(“我在bytedata”);
    var str=document.getElementById('bytedatatextfield').value;
    var arrayByte=str2ab(str);
    发送(arrayByte);
    返回false;
    }
    //从字符串创建arraybuffer
    功能str2ab(str){
    //警报(‘我在str2ab’+str中);
    var buf=new ArrayBuffer(str.length*2);//每个字符2个字节
    var bufView=新UINT16阵列(buf);
    对于(变量i=0,strLen=str.length;i
    在浏览器上

    传递了jsp文本框字符串-->Hello

    发送的数据

    七十二 101 108 108 111

    收到的数据


    [object Blob]-->我希望这是“Hello”

    控制台中有哪些错误?请更具体一些。您希望浏览器接收来自服务器的消息,但会发生什么情况?有叫onMessage的吗?这不是您期望的数据类型吗?在JavaScript中,我认为它应该是

    “+”received“+strReceived
    而不是

    “+”接收“+事件