要求模块聊天上的node.js
var net = require("net");
存储用户和连接数 变种计数= 0, 用户= {};
创建服务器
var server = net.createServer(function (conn){
存储当前的昵称和设定utf8编码
var nickname;
conn.setEncoding('utf8');
显示在外壳上的消息时,你stablish连接
conn.write(' > welcome to \033[92mnode-chat\033[39m!'
+ '\n > ' + count + ' other people are connected at this time.'
+ '\n > please write your name and press enter: ');
数连接++
count++;
当recives数据时,它检查存储器中是否存在具有该名称的用户显示消息并返回。否则显示欢迎消息。否则,如果您输入消息或任何数据(在注册您的昵称后)在shell上显示它。
conn.on('data', function (data){
data = data.replace('\r\n', '');
if(!nickname) {
if(users[data]) {
conn.write('\033[93m > nickname already in use. Try again:\033[39m ');
return;
} else {
nickname = data;
users[nickname] = conn;
for(var i in users) {
users[i].write('\033[90m > ' + nickname + ' joined the room\033[39m\n');
}
}
} else {
for(var i in users) {
if(i != nickname) {
users[i].write('\033[96m > ' + nickname + ':\033[39m ' + data + '\n');
}
}
}
});
当您关闭或结束连接时,会从存储中删除您的昵称,并显示一条消息。 3000端口
server.listen(3000, function(){
console.log('\033[96m server listening on *:3000\033[39m');
});
conn.on('close', function(){
count--;
delete users[nickname];
conn.write('\033[90 > ' + nickname + ' left the room\033[39m\n');
});
});
服务器我在聊天的错误。我使用de shell建立了两个telnet连接。但是当我关闭另一个关闭两个,并向我显示一条错误消息。我的代码有什么问题?
当我添加该代码并关闭连接时出现: 由外部主机关闭的连接。 events.js:82 throw er; //未处理'错误'事件 ^ 错误:此套接字已由对方 在Socket.writeAfterFIN [as write](net。js:265:12) at /home/michel/Escritorio/ejemplos-nodejs/chat/index.js:45:9 at Array.forEach(native) at Socket。(/home/michel/Escritorio/ejemplos-nodejs/chat/index.js:44:25) at Socket.EventEmitter.emit(events.js:104:17) at TCP.close(net.js:458 :12) –
mishelashala
是的,请参考我文章的最后部分。你需要为'conn'附加一个'error'处理程序 –