2012-03-21 1 views
2

Простой код:Как отправить сообщение для индивидуального клиента в Node.js, используя только Net модуль (не Socket.io)

process.stdin.resume() 
process.stdin.setEncoding('utf8'); 
var server = createServer(); 
server.listen(9999); 
server.on('connection',function(sock){ 
    console.log('CONNECTED:'+sock.remoteAddress+":"+sock.remotePort); 
    process.stdin.on('data',function(send){ 
      sock.write(send); 
    }); 
} 
  • При получении соединения от 10.10.10.1 и 10.10.10.2, сообщение "CONNECTED: 10.10.10.1: ххх" и "CONNECTED: 10.10.10.2: ххх" являются дисплей на терминал

  • чтобы отправить сообщение клиенту, я sock.write (отправка) .. но, Все клиенты получили сообщение

  • Как отправить сообщение конкретному клиенту. Из поиска в google есть много документов, связанных с socket.io (решения) .. , но перед использованием socket.io, я хочу знать node.js. (или сам JavaScript?)

  • После прочтения комментария Вадима, я записал больше кода ниже. полностью рабочий код.

  • Я добавляю две вещи. По комментарий Вадима, добавьте свойство sock.id и используя свойство sock.remoteAddress, отправить STDIN сообщение сервера в
    10.10.10.1 клиента только

var net = require('net') process.stdin.resume() process.stdin.setEncoding('utf8'); var server = net.createServer(); server.listen(9999); server.on('connection',function(sock){ sock.write('input your ID: ',function(){ var setsockid = function(data){ id=data.toString().replace('\r\n',''); console.log('ID:'+id+' added!!') sock.id=id sock.removeListener('data',setsockid); }; sock.on('data',setsockid); sock.on('data',function(data){ d=data.toString().replace('\r\n',''); console.log(sock.id+' say: '+d); }); }); console.log('CONNECTED:'+sock.remoteAddress+":"+sock.remotePort); process.stdin.on('data',function(send){ if (sock.remoteAddress=='10.10.10.1') sock.write(send); }); });
+0

Спасибо за ваше редактирование ... Написание кода, как указано выше, было для меня немного сложным, потому что это был мой первый пост – ryuken73

ответ

3

Ответ на ваш вопрос находится на Node.JS main page.

var net = require('net'); 

var server = net.createServer(function (socket) { 
    socket.write('Echo server\r\n'); 
    socket.pipe(socket); 
}); 

server.listen(1337, '127.0.0.1'); 
+0

спасибо !. Я понимаю, что «sock.pipe (socket)» выводит поток сокета на входной поток сокета, и, используя это, сервер может отправлять данные только от конкретных клиентов только этому клиенту. Но то, что я хочу знать, это ... Есть ли способ отправить сообщение (например, stdin сервера) в КОНКРЕТНЫЙ КЛИЕНТ (в моем примере, ТОЛЬКО 10.10.10.1 клиент). – ryuken73

+0

В этом примере socket.write отправляет только определенное соединение. Даже если вы создаете много соединений из одного адреса socket.write будет отправлять данные только на одно соединение. Вам нужны дополнительные клиенты проверки подлинности, потому что ip-адрес не идентифицирует клиента. –

+0

Спасибо Вадим. Клиент должен быть аутентифицирован. это верно. Серверу требуется идентификация клиента. Я написал больше кода. Слишком сложно написать код в поле комментариев, поэтому, пожалуйста, см. Оригинальный вопрос. – ryuken73

Смежные вопросы