Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在尝试在Node.js中重新连接TCP连接后会出现ECONNREFUSED错误?_Node.js_Sockets - Fatal编程技术网

为什么在尝试在Node.js中重新连接TCP连接后会出现ECONNREFUSED错误?

为什么在尝试在Node.js中重新连接TCP连接后会出现ECONNREFUSED错误?,node.js,sockets,Node.js,Sockets,我正在尝试使用以下命令在Node.js中打开与另一个程序的TCP连接: connection = net.connect(18003, function() { }); connection.on('close', function() { console.log('Connection closed'); }); connection.on('error', function() { console.log('Connection error'); setTimeout(fun

我正在尝试使用以下命令在Node.js中打开与另一个程序的TCP连接:

connection = net.connect(18003, function() {
});

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

  setTimeout(function () {
    connection = net.connect(18003, ipAddress,
      function() {
    });
  }, 10000); //Try to reconnect
});
如果另一个程序未运行(因此未侦听),则第一次正确处理连接错误,但如果我在超时后再次尝试连接(未成功),则会出现以下错误:

events.js:68
  throw arguments[1]; // Unhandled 'error' event

Error: connect ECONNREFUSED

现在有人知道为什么第一次正确处理了不成功的连接,而第二次却没有?我希望在等待另一个程序启动时继续尝试连接。

每次重试时,您都必须绑定到,因为每次调用都会返回一个带有自己事件绑定的新连接:

// ...
  setTimeout(function () {
    connection = net.connect(18003, ipAddress,
      function() {
    });

    connection.on('error', function () {
      console.log('Connection retry error');
    });
  }, 10000); //Try to reconnect
// ...
要连续重试,请将“设置”包装在可根据需要调用的函数中:

function setupConnection() {
  connection = net.connect(18003, ipAddress, function () {
  });

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

  connection.on('error', function() {
    console.log('Connection error');

    setTimeout(setupConnection, 10000); //Try to reconnect
  });
}

setupConnection();

您必须在每次重试时绑定到,因为对的每次调用都会返回一个具有自己事件绑定的新事件:

// ...
  setTimeout(function () {
    connection = net.connect(18003, ipAddress,
      function() {
    });

    connection.on('error', function () {
      console.log('Connection retry error');
    });
  }, 10000); //Try to reconnect
// ...
要连续重试,请将“设置”包装在可根据需要调用的函数中:

function setupConnection() {
  connection = net.connect(18003, ipAddress, function () {
  });

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

  connection.on('error', function() {
    console.log('Connection error');

    setTimeout(setupConnection, 10000); //Try to reconnect
  });
}

setupConnection();

@Jonathan Lonowski,当我使用ur代码时,我注意到在服务器重启时,它会打开多个连接。“错误”事件在关闭套接字之前发生。移动 对套接字关闭事件的递归调用正常工作

function setupConnection() {
  connection = net.connect(18003, ipAddress, function () {
  });
  connection.on('close', function() {
    console.log('Connection closed');
    setTimeout(setupConnection, 10000); //Try to reconnect EDITED
  });

  connection.on('error', function() {
    console.log('Connection error');
  });
}
setupConnection();

@Jonathan Lonowski,当我使用ur代码时,我注意到在服务器重启时,它会打开多个连接。“错误”事件在关闭套接字之前发生。移动 对套接字关闭事件的递归调用正常工作

function setupConnection() {
  connection = net.connect(18003, ipAddress, function () {
  });
  connection.on('close', function() {
    console.log('Connection closed');
    setTimeout(setupConnection, 10000); //Try to reconnect EDITED
  });

  connection.on('error', function() {
    console.log('Connection error');
  });
}
setupConnection();

您需要为新创建的
连接重新注册
'error'
事件处理程序。您需要为新创建的
连接重新注册
'error'
事件处理程序。我希望这个答案加倍,因为它节省了我很多时间。包装设置功能,它将节省大量时间。在超时时调用wrapped函数之前,请确保
.close()
.destroy()
连接以防止内存泄漏。再等几秒钟,以避免出现赛况。我想双倍提高这个答案,因为它节省了我很多时间。包装设置功能,它将节省大量时间。在超时时调用wrapped函数之前,请确保
.close()
.destroy()
连接以防止内存泄漏。并等待几秒钟以避免比赛条件。