1

我正在使用socket.io(java端的mrniko/netty-socket.io服务器和客户端的socket.io.js)问题是当我将json对象从客户端发送到服务器时,在接收并显示数据后,它在其有趣的字符串数据正常(即发送和接收)时给出错误“数据处理期间的错误”。知道我做错了什么吗?这是代码(服务器端)

@OnMessage
public void onMessageRecieved(SocketIOClient client, String data, AckRequest ackRequest){
System.out.println("client is "+client+" data is "+data);
}

这是我发送数据的客户端代码

var socket = io.connect('http://www.example.com:9090', 
{
'reconnection delay' : 2000,
'force new connection' : true
}); 
var data1 = {
user : document.getElementById('t1').value,
pass : document.getElementById('p1').value
};
socket.send(JSON.stringify(data));

我也试过

socket.json.send(JSON.stringify(data));

它的发送和显示在服务器端但是当我将它传递给任何其他功能以进行进一步操作时,它会给出错误“数据处理期间出错”。用于解析我正在使用

JsonReader reader = new JsonReader(new StringReader(data));
JsonObject json = new JsonParser().parse(reader).getAsJsonObject();
System.out.println(json.get("value1").toString());

请告诉我我是否出错了?

4

1 回答 1

2

你检查过https://github.com/mrniko/netty-socketio-demo项目吗?它在“聊天示例”中使用 json 消息。

至于你的情况。在客户端试试这个:

var socket = io.connect('http://www.example.com:9090', 
{
   'reconnection delay' : 2000,
   'force new connection' : true
}); 
var data1 = {
    user : document.getElementById('t1').value,
    pass : document.getElementById('p1').value
};
socket.send(data); // you don't need to use JSON.stringify

在服务器端: // LoginObj 应该有一个“user”和“pass”字段

    server.addJsonObjectListener(LoginObj.class, new DataListener<LoginObj>() {
          @Override
          public void onData(SocketIOClient client, LoginObj data, AckRequest ackRequest) {
             data.getUser();
             data.getPass();
        }
    });
于 2013-10-18T16:01:28.593 回答