【发布时间】:2015-08-18 18:09:32
【问题描述】:
我想将 JSON 发送到套接字并使用 JavaScript 处理它。但不幸的是,JSON-Object 并未完整发送。将对象data 写入输出流后,服务器会收到 JSON 对象,而不是等待之后发生的任何事情。
我如何写入套接字
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("from", from);
jsonGenerator.writeObjectField("data", data);
jsonGenerator.writeEndObject();
服务器处理程序在某一时刻收到的内容
{"from":"me","data":{"one":1,"two":2}
如您所见,最后一个} 未被写入。如果我在from 字段之前写data 对象,服务器会得到这个:
{"data":{"one":1,"two":2}
JSON 对象的其余部分将被发送,但不会作为一个实体发送,这使得在服务器上难以解析。
JsonGenerator 是这样创建的
JsonGenerator jsonGenerator = (new JsonFactory()).createGenerator(socket.getOutputStream());
jsonGenerator.setCodec(new ObjectMapper());
我怀疑它与编解码器设置有关。
服务器端
是一个简单的 NodeJS,它记录来自套接字的数据。
net.createServer(function(socket) {
socket.on("data", function(data) {
console.log(data.toString());
});
}).listen(8080);
您可以在控制台中看到 JSON 对象是通过 2 个不同的事件发送的。当我尝试解析传入的data 时,它也会引发错误,因为缺少某些对象。
编辑
我注意到有时它会发送整个 JSON-Object,但如果有的话,也只会发送 20 次。只发送字符串字段和数字字段可以完美地工作。
【问题讨论】:
-
“服务器处理程序在某一点收到的内容”可以记录另一端发送的内容吗?
-
是的,我可以,它是一个简单的 NodeJS 服务器,它将传入的数据记录到控制台。我添加了上面的代码。
-
我的意思是,你可以记录比 Java 端发送的内容,而不是 Node.js 接收的内容。