这个是telnet的机制问题,要var一个tmp变量对data进行缓冲。正好之前我问过类似的问题并找到了正确答案,这个问题你好像问了挺久了的,不知你现在是否还会疑惑,我贴上正确代码吧。
var net=require('net');
var count=0, users={};
var server=net.createServer(function(conn){
conn.write(
'
> welcome to33[92m node-chat33[39m !'+
'
> '+count+' other people are connected at this time.'+
'
> please write your name and press enter: '
);
count++;
conn.setEncoding('utf8');
var nickname;
function broadcast(msg, exceptMyself){
for(var i in users){
if(!exceptMyself||i!=nickname){
users[i].write(msg);
}
}
}
var tmp = '';
conn.on('data',function(data){
tmp += data;
if (tmp.indexOf('
') === -1) {
return;
}
data = tmp.replace(/
|
/g, '');
if(!nickname){
if(users[data]){
conn.write('
33[93m> nickname already in use. try again:33[39m
');
tmp='';
return;
}else{
nickname=data;
users[nickname]=conn;
broadcast('
33[90m> '+nickname+' joined the room33[39m
');
}
}else{
broadcast('
33[96m> '+nickname+':33[39m '+data+'
');
}
tmp='';
});
conn.on('close',function(){
count--;
delete users[nickname];
broadcast('
33[096m> '+nickname+' left the room33[39m
');
});
});
server.listen(3000,function(){
console.log('33[96m server listening on *:300033[39m');
});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…