簡體   English   中英

Java客戶端卡在來自Node.js服務器的數據的數據流中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM