Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nodejs不';不要一直开火';数据';来自Java程序的成功POST事件_Java_Json_Http_Node.js_Post - Fatal编程技术网

nodejs不';不要一直开火';数据';来自Java程序的成功POST事件

nodejs不';不要一直开火';数据';来自Java程序的成功POST事件,java,json,http,node.js,post,Java,Json,Http,Node.js,Post,我编写了一些代码,定期将数据发布到NodeJs程序,该程序侦听发布并打印数据。然而,有时在头上通过,有时头和身体都通过。下面是发布数据的Java代码: JSONObject dataObject = new JSONObject(); dataObject.put("test", "true"); URLConnection urlConn = thisSubUrl.openConnection(); urlConn.setDoInput (true); urlConn.setDoOutput(

我编写了一些代码,定期将数据发布到NodeJs程序,该程序侦听发布并打印数据。然而,有时在头上通过,有时头和身体都通过。下面是发布数据的Java代码:

JSONObject dataObject = new JSONObject();
dataObject.put("test", "true");
URLConnection urlConn = thisSubUrl.openConnection();
urlConn.setDoInput (true);
urlConn.setDoOutput(true);
urlConn.setUseCaches (false);
urlConn.setRequestProperty("Content-Type", "application/json");
OutputStreamWriter wr = new OutputStreamWriter(urlConn.getOutputStream());
String dataStr = dataObject.toString();
wr.write(dataStr, 0, dataStr.length());
wr.flush();
wr.close();

BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
in.close();
服务器代码如下所示:

var server= http.createServer(function(req,res){
req.setEncoding('utf8');
console.log(req.headers);
req.on('data', function(chunk) {
          console.log("Receive_Event::" + chunk);
         });
req.on('end', function() {
    console.log('on end');
});

console.log("Bytes received: " + req.socket.bytesRead);
if(req.method=='POST'){
    handlePost(req,res);
} else{
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end();
}
}).listen(1338, "127.0.0.1");
标题总是打印出来的。接收的字节数在长度上有所不同,介于标头中的字节数和标头中的字节数+正文长度之间


为什么会发生这种情况?

可能发生的情况是,在收到所有“数据”块之前,您将发出
res.end()
(不知道
handlePost
实际做什么)。您应该调用“end”事件中的所有额外逻辑


事件始终使用命令行curl触发。我不确定从java发布有什么问题。在收到所有标题和帖子正文之前,您是否看到“结束”?我认为您应该缓冲所有数据,并在“end”事件handler中调用handlePost,这是完全正确的。在我发布帖子之后,我突然想到这正是发生的事情。谢谢你的快速回复!
var server= http.createServer(function(req,res){
    req.setEncoding('utf8');

    console.log(req.headers);

    req.on('data', function(chunk) {
        console.log("Receive_Event::" + chunk);
    });

    req.on('end', function() {
        console.log('on end');
        console.log("Bytes received: " + req.socket.bytesRead);
        if(req.method=='POST'){
            handlePost(req,res);
        } else{
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.end();
        }
    });


}).listen(1338, "127.0.0.1");