Nodejs错误:此套接字已由另一方结束

时间:2016-01-14 01:07:36

标签: node.js sockets

我已经设置了一个简单的服务器和客户端,但每当我关闭客户端时,似乎无法重新连接。这是我的客户:

    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)服务器将不再在其系统/废弃资源中监听该流的套接字端点。

对我的问题来源的任何见解将不胜感激。

2 个答案:

答案 0 :(得分:1)

您应该在客户端使用'connect'事件,以确保仅在套接字就绪时才执行请求。因此,在事件的回调中,您可以调用write()函数。

答案 1 :(得分:0)

您的服务器仅在收到数据时关闭套接字,而您的客户端从不发送任何数据。