Java客户端卡在来自nodejs服务器的数据数据流中
Java client stuck in datastream of data from nodejs server
我的问题是,当我将数据(使用 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");
相关文章:
- Jquery append()概要文件(使用$.getJSON的服务器数据)
- 在网页上显示实时服务器数据
- 如何将Node.js服务器数据发送到Javascript客户端
- 主干.js当服务器数据为空时 model.fetch
- 节点.js游戏开发,客户端-服务器数据交换逻辑
- 如何访问单独js文件中的服务器数据
- 如何通过javascript函数在jade模板中使用服务器数据
- 主干模型未使用服务器数据更新
- Durandal/Knockout-在绑定之前从服务器数据创建viewModel
- 掩码客户端到服务器数据hybi 17
- 客户端是否有办法在套接字断开连接时发送服务器数据?
- 在我的ember应用程序中获取本地json服务器数据
- AngularJS:在页面加载时用服务器数据改变输入值
- 包含服务器数据的Ng表
- Knockout JS使用javascript类型从服务器数据初始化可观察数组
- 来自服务器数据的动态路由
- 如何在网站上实时加载服务器数据
- 将服务器数据传递给 RequireJS 模块的首选方法是什么?
- Nodejs将服务器数据传递给套接字
- 如何将html视图数据或(Python)服务器数据传输到Angular或Javascript