【发布时间】:2015-03-04 19:21:47
【问题描述】:
我的问题是,当我从 nodejs 服务器向 java 客户端发送数据(使用 socket.write())时,只要没有 FIN 数据包,java 客户端就会卡在数据流中(当我发送在 nodejs 中使用 socket.end()) 从服务器。
我现在的问题是,java 是否可以在没有 FIN 包的情况下读取它。
我认为必须有一种方法,因为当您使用 NodeJS 的 net 模块。
服务器
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 客户端向服务器发送数据确实有效。
【问题讨论】:
标签: java javascript node.js tcp