【发布时间】:2016-04-19 05:06:58
【问题描述】:
我已经设置了一个简单的服务器和客户端,但是每当我关闭客户端时,似乎无法重新连接。这是我的客户:
const net = require('net');
var client = net.connect({port: 8080, host: '127.0.0.1'});
var response = '';
// events
client.on('data', function(chunk) { response += chunk });
client.on('end', function() {
console.log(response);
client.end()
});
// main execution
client.write('test');
这是我的服务器:
const net = require('net');
var server = net.createServer();
server.listen(8080, '127.0.0.1');
server.on('connection', function(sock) {
sock.on('data', function(chunk) {
sock.write('test received');
sock.end();
});
});
这只是代表我的问题的大纲代码。当我第一次执行我的客户时,一切正常。但是,当我再次执行它时,服务器会输出标题中提到的错误并崩溃。如果我删除 'client.end()' 并从客户端程序中删除 Ctrl+C 以使其结束,也会发生同样的情况。
我对套接字的理解是,它们代表客户端和服务器之间的流中的端点。当不再需要该流时(即,当客户端执行它需要做的事情时),我希望完全删除该流。我认为在该单个流的客户端和服务器端点上调用 end() 可以实现这一点,就像发送两个 FIN 消息一样,但正如所解释的那样,它没有。我想这样做的原因是:(a)客户端文件将实际完成执行,(b)服务器将不再在其系统/浪费资源中监听该流的套接字端点。
对我的问题根源的任何见解将不胜感激。
【问题讨论】: