Java客户端卡在来自nodejs服务器的数据数据流中

Java client stuck in datastream of data from nodejs server

本文关键字:服务器 数据 数据流 nodejs 客户端 Java      更新时间:2023-09-26

我的问题是,当我将数据(使用 socket.write())从 nodejs 服务器发送到 java 客户端时,只要没有 FIN 数据包(当我在 nodejs 中使用 socket.end() 时会发送)从服务器发送,java 客户端就会卡在数据流中。

我的问题现在有一种方法可以在没有 FIN 包的情况下读取它。

我认为必须有一种方法,因为当您使用NodeJS的网络模块。

服务器

var server = require("net").Server();
function cl(t){console.log(t)};
server.listen("5022","127.0.0.1", function(req,res){
cl("Server started...");
});

server.on("connection", function(socket){
var ip = socket.remoteAddress;
socket.setEncoding("utf8");
cl("connection --> "+ip);
socket.write("Welcome...");
socket.on("data",function(d){
    var data = JSON.stringify(d);
    cl("Data arrived "+data);
});
socket.on("end", function(){
    cl("end");
})
socket.on("close",function(){
    cl("Disconnect --> "+ip+"'n");
})
socket.on("error", function(err){
    cl("ERROR "+err);
});
});

注意:如前所述,当我添加socket.end()时,将发送一个FIN数据包,并且java客户端退出数据流并返回数据。因此,目前我可以在整个会话中从服务器发送一次数据。

客户的一部分

Socket sc = new Socket(ip, port);
BufferedReader in = new BufferedReader(new
InputStreamReader(sc.getInputStream()));
DataOutputStream out = new DataOutputStream(sc.getOutputStream());
String input;
while(true)
{
   while (!in.ready()) {Thread.sleep(2000);}
   input = in.readLine();
   System.out.println("Message : " + input);
   out.writeUTF(input);
}

注: 从此 Java 客户机向服务器发送数据确实有效。

in.readLine()正在按照它所说的去做,阅读一行,这意味着它正在寻找一个换行符来知道何时停止阅读。因此,在您的节点代码中,只需在.write()时附加一个'n,以便 Java 代码可以恢复。示例:socket.write("Welcome...'n");