node.js - Nodejs错误: This socket has been ended by the other party

标签 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) 服务器将不再在其系统中拥有该流的套接字端点/浪费资源来监听它。

如果您能深入了解我的问题根源,我们将不胜感激。

最佳答案

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

关于node.js - Nodejs错误: This socket has been ended by the other party,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34780002/

相关文章:

css - 错误 : 'cleancss' is not a recognized as an internal or external

使用 GetQueuedCompletionStatus 和 ERROR_MORE_DATA 的套接字

node.js - Node + Express : loadtest causing the application to quit with Error: accept ENFILE

node.js - kafka Node 无法在本地环境中连接到kafka服务器

java - 如何在客户端和服务器之间传输多个文件?

c - 通过像 Hamachi 这样的 VPN 或开放 VPN 的个人程序?

java - 从 PC 发送到 PC 以及从 PC 发送到 Android 时读取的字节数组不一致

Java套接字错误: java.net.ConnectException:连接被拒绝:连接

node.js - QNA Maker 未返回精确匹配项

javascript - gulpfile.js 中出现意外的 token .pipe