Как иметь постоянное соединение с Net в Node.js? - PullRequest
0 голосов
/ 29 сентября 2018

Я использую 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)
  }
    });
  })
}

Кто-нибудь знает, как мне продолжить?Спасибо:)

1 Ответ

0 голосов
/ 29 сентября 2018

Вы не можете отправить данные, получить ответ и затем отправить больше данных по тому же соединению.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
...