【问题标题】:NodeJs: how to keep Node server-> Java client connection openNodeJs:如何保持 Node 服务器-> Java 客户端连接打开
【发布时间】:2016-11-03 01:37:52
【问题描述】:
server.js 
var net = require('net');
var client = net.connect(4567, 'localhost', function() {
client.write("hello");

client.on('error', function(ex) {
  console.log(ex); });

client.end();
});

client.java
server = new ServerSocket(4567);
client = server.accept();
InputStream input = client.getInputStream();
String inputString = MyClass.inputStreamAsString(input);
system.out.println(inputString);    //inputString gives me "hello"

client.java 是一个时间调度程序,每 5 秒运行一次,它尝试从 Node 获取文本并打印出来。我不想从 Node 关闭套接字,因此我可以在 client.java 已经运行时向它发送另一条消息。我有 2 个问题

  1. 删除 client.end() 不会向调度程序发送任何消息
  2. 让 client.end() 在第一个周期(5 秒)工作,但是当它运行第二个周期(第 6 秒)时,出现错误 Java.net.SocketException: Socket is closed。

我怎样才能不结束我在 Node 中的套接字并能够向调度程序发送消息?

【问题讨论】:

    标签: java node.js sockets


    【解决方案1】:

    您是否查看过 net 模块的 allowHalfOpen 选项?

    var client = net.connect({port: 4567, allowHalfOpen: true},function() {
        //etc
    };
    

    【讨论】:

    • 我做到了,但我没有一次发送所有消息并关闭连接。我的前端连接到节点以发送消息(在用户单击时发送消息(例如“开始/停止”的命令。因此,单击时它应该向始终运行的调度程序发送命令(开始/停止)。我不希望套接字完全结束。有可能吗?现在消息只发送一次,套接字在调度程序的第二个周期关闭,因为我做了 client.end
    猜你喜欢
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多