【发布时间】:2014-03-17 20:04:29
【问题描述】:
在我的服务器端代码中,我需要能够监听套接字以与同一台机器上的 Java 7 测试应用程序交换 JSON“数据包”。建立连接并由 Java 测试应用程序构造 JSON 字符串并将其写入套接字。它被 Dart 服务器端应用程序接收并传递给一个回调方法,handleJson,它会尝试对其进行解码。该过程在“JSON.decode”上终止。
我认为它死了,因为字符串是由 Java 'writeUTF' 方法预先添加的,该方法带有一个短 int,其中包含 JSON UTF-8 中不包括前导短且前导字节为 0 的字节数。
- 是否有一个 Dart 方法来处理这个问题,在每个方向上,还是我必须编写代码? (我原以为 JSON 在语言之间很容易工作。)
在我的 Java 测试应用程序中写入套接字之前的 JSON 字符串:
{"target":"DOOR","command":"OPEN"} // 34 characters
一个Java sn-p:
// in a try-catch
Socket client = new Socket(serverName, port);
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF(json);
client.close();
Java 文档指出,out.writeUTF 方法将 json 字符串转换为 UTF-8,字符串长度作为包含写入字节总数的短整型前缀。
主要:
ServerSocket.bind('127.0.0.1', 4041)
.then((serverSocket) {
print('connected');
// prints: 'connected'
serverSocket.listen((socket) {
socket.transform(UTF8.decoder).listen(handleJson);
});
});
handleJson 方法:
handleJson(String stringAsJson){
print('string length is ' + (stringAsJson.length).toString());
// prints: 'string length is 36'
print('received json $stringAsJson');
// prints: 'received json '
String json = JSON.decode(stringAsJson);
// dies on decode
print('Sever Socket received: $json');
}
【问题讨论】:
标签: java json sockets socket.io dart