Java Socket和Node.js net.Socket之间的流末尾有什么区别

时间:2018-10-17 11:04:19

标签: java node.js tcp

我知道,如果我使用Java的BufferedReader.readLine(),一旦readLine()== null,我就可以到达流的末尾,这将使我的套接字无法用于进一步的读取,并且我将不得不创建另一个收到下一个答复。

假设我每10秒向服务器发送一条消息。

如果最近60秒钟内没有任何操作,服务器将关闭连接。

Node.js中的这段代码如何连续工作并且永不停止接收响应:

var client = new net.Socket();

function sendMsg()
{
    client.write(msg);
    console.log('Write:\n' + msg);
}

client.connect(PORT, HOST, function() {
    console.log('TCP: ' + HOST + ':' + PORT + '\n' + msg + '\n');
    setInterval(sendMsg, 10000);
});

client.on('data', function(data) {
    console.log('Received:\n' + data);
});

client.on('close', function() {
    console.log('Connection closed');
});

我已经在Node.js documentation中读到,套接字需要接收FIN包才能发出关闭流的'end'事件。

所以用两个词:

  • 如果没有其他要读取的内容,Java将关闭流。
  • Node.js在收到FIN包后关闭流,并且不在乎流是否为空。

我是否正确地认为这两者在态度上并不具有可比性,或者是否有任何方法可以在Java中实现类似的功能?

目前,我在遇到特定词组时停止阅读信息流,并在我确定以后还有更多阅读内容时继续阅读。它现在可以使用,但是我知道这是一个丑陋的hack,而且很容易出错。

0 个答案:

没有答案