2013-09-10 3 views
0

Я пытаюсь построить сервер TCP-чат с помощью следующего кода -Node.js - подключить не у слушателя получение выполняется в TCP сервер

var net = require("net"); 

Array.prototype.remove = function(e) { 
    for (var i = 0; i < this.length; i++) { 
    if (e == this[i]) { return this.splice(i, 1); } 
    } 
}; 

function Client(stream) { 
    this.name = null; 
    this.stream = stream; 
} 

var clients = []; 

var server = net.createServer(function (stream) { 
    var client = new Client(stream); 
    clients.push(client); 

    stream.setTimeout(0); 
    stream.setEncoding("utf8"); 

    stream.addListener("connect", function() { 
    stream.write("Welcome, enter your username:\n"); 
    }); 

    stream.addListener("data", function (data) { 
    if (client.name == null) { 
     client.name = data.match(/\S+/); 
     stream.write("===========\n"); 
     clients.forEach(function(c) { 
     if (c != client) { 
      c.stream.write(client.name + " has joined.\n"); 
     } 
     }); 
     return; 
    } 

    var command = data.match(/^\/(.*)/); 
    if (command) { 
     if (command[1] == 'users') { 
     clients.forEach(function(c) { 
      stream.write("- " + c.name + "\n"); 
     }); 
     } 
     else if (command[1] == 'quit') { 
     stream.end(); 
     } 
     return; 
    } 

    clients.forEach(function(c) { 
     if (c != client) { 
     c.stream.write(client.name + ": " + data); 
     } 
    }); 
    }); 

    stream.addListener("end", function() { 
    clients.remove(client); 

    clients.forEach(function(c) { 
     c.stream.write(client.name + " has left.\n"); 
    }); 

    stream.end(); 
    }); 
}); 

server.listen(7000); 

Но всякий раз, когда я пытаюсь подключиться к этому серверу с TCP

nc localhost 7000 

или

telnet localhost 7000 

подключения блок не получает казнены.

stream.addListener("connect", function() { 
     stream.write("Welcome, enter your username:\n"); 
     }); 

Я также попытался подключиться к этому серверу tcp с небольшим кодом iOS, но не повезло.

Любая идея, когда/как этот соединительный блок будет выполнен?

Примечание: Я новичок в node.js и использую mac os x.

ответ

1

Прежде всего, это должно быть connection событие.

Функция, переданная createServer, становится обработчиком события для события «connection».

var server = net.createServer(function (stream) { 
    //if you are here you are already connected 
}); 

Если вы хотите слушать connection случае это сделать, как это -

var server = net.createServer(function (stream) { 
    //your code 
}); 

server.addListener("connection", function() { 
    console.log("connected");  
}); 
Смежные вопросы