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

时间:2016-02-19 11:34:46

标签: javascript java websocket bytebuffer arraybuffer

我的要求如下

第1步

  1. 建立WebSocket通信 - >完成。
  2. 从客户端向服务器发送数据 - >完成
  3. 从服务器接收数据到客户端 - >完成
  4. 第2步

    1. 建立WebSocket通信 - >完成
    2. 从客户端[jsp / javascript]向服务器
    3. 发送字符串数据
    4. 字符串 - > JavaScript上的ArrayBuffer - >完成
    5. 在Bytebuffer中接收@ServerEndpoint java类的数据 - >完成
    6. 如何将相同的数据发送回浏览器 - > ??
    7. 如何将数据转换为字符串 - > ??
    8. 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;
      }   }
      

      发送的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;
      
      }
      
      浏览器

      jsp textbox String传递 - &gt; 你好

      已发送数据

      72 101 108 108 111

      收到的数据

      [object Blob] - &gt; 我想要这个&#34;你好&#34;

0 个答案:

没有答案