Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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
Javascript 如何在Node.js中与Net建立持久连接?_Javascript_Node.js_Telnet - Fatal编程技术网

Javascript 如何在Node.js中与Net建立持久连接?

Javascript 如何在Node.js中与Net建立持久连接?,javascript,node.js,telnet,Javascript,Node.js,Telnet,我使用Telnet客户端来验证电子邮件,我连接到服务器,它以250的响应,但当我编写另一个命令并要求回答时,它根本不回答我 这是我的代码: function ConnectTelnet(){ //var connection = new telnet(); var response; var HOST = 'mail.dominio.com'; var PORT = 25; var net = require('net'); var client = net.con

我使用Telnet客户端来验证电子邮件,我连接到服务器,它以250的响应,但当我编写另一个命令并要求回答时,它根本不回答我

这是我的代码:

 function ConnectTelnet(){
  //var connection = new telnet();
  var response;
  var HOST = 'mail.dominio.com'; 
  var PORT = 25;

  var net = require('net');
  var client = net.connect(25,'mail.dominio.com',function(){
    console.log('connected to server!');
    console.log('CONNECTED TO: ' + HOST + ':' + PORT);

    client.on('data', function(data) {
      console.log('Received: ' + data);
      response = data;
     if(response.indexOf("220") === -1){
    client.write('EHLO dominio.com')
    console.log(data)
  }
    });
  })
}

有人知道我怎么继续吗?谢谢:)

您无法发送数据,获取答案,然后在同一连接上发送更多数据。TCP不会“单独”发送消息。TCP是一种流协议,这意味着当您将字节写入套接字时,在接收端以相同的顺序获得相同的字节。没有“消息边界”或“数据包”之类的概念

如果你想这样做,你需要每次建立一个新的连接

这就是我在同一个连接上发送几个EHLO的方式:

const net = require('net');
const client = net.createConnection({ host: '127.0.0.1', port: 1025 }, () => {
  console.log('connected to server!');
  checkEHLO(client, [ 'xxx@xxx.xxx', 'xxx@xxx.xxx', 'xxx@xxx.xxx' ]);
});
client.on('data', (data) => {
  console.log(data.toString());
  client.end();
});
client.on('end', () => {
  console.log('disconnected from server');
});

function checkEHLO(client, emails){
    emails.forEach((email) => {
        client.write('EHLO ' + email + '\n');
    });
}
这就是我得到的回应:

connected to server!
220 127.0.0.1 ESMTP Service Ready
250-Hello xxx@xxx.xxx
250-PIPELINING
250-8BITMIME
250-STARTTLS
250 AUTH PLAIN LOGIN
250-Hello xxx@xxx.xxx
250-PIPELINING
250-8BITMIME
250-STARTTLS
250 AUTH PLAIN LOGIN
250-Hello xxx@xxx.xxx
250-PIPELINING
250-8BITMIME
250-STARTTLS
250 AUTH LOGIN PLAIN

怎么样?我已经修改了问题的代码,所以你可以看到我尝试使用client.write()但它只是不打印响应@Bergi你说的“它不打印响应”是什么意思?您是否收到了任何数据,并且其中是否包含
“220”
?对于此类问题,通常的解决方案不是每次都创建一个新连接,而是发明或使用一个数据协议来定义消息和消息之间的分隔符。最简单的方案是基于文本的方案,它以回车字符结束每条消息。在流协议中定义消息格式的设计还有很多很多。