[英]Java client stuck in datastream of data from nodejs server
我的問題是,當我從Node.js服務器向Java客戶端發送數據(帶有socket.write())時,只要沒有FIN數據包(當我使用套接字時就會發送),Java客戶端就會卡在數據流中。服務器中的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客戶端可以將數據發送到服務器。
in.readLine()
會按照說的做,讀取一行,這意味着它正在尋找換行符以知道何時停止讀取。 因此,在您的節點代碼中,只需在.write()
時附加一個\\n
,以便Java代碼可以恢復。 示例: socket.write("Welcome...\\n");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.