WebSocket通信:javascript和java类之间的通信
我的要求如下 步骤1WebSocket通信: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
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 '
+charCodeAt街(一);
}
返回buf;
}
在浏览器上
传递了jsp文本框字符串-->Hello
发送的数据
七十二
101
108
108
111
收到的数据
[object Blob]-->我希望这是“Hello”控制台中有哪些错误?请更具体一些。您希望浏览器接收来自服务器的消息,但会发生什么情况?有叫onMessage的吗?这不是您期望的数据类型吗?在JavaScript中,我认为它应该是
”
“+”received“+strReceived
而不是”
“+”接收“+事件代码>