要求模塊聊天上的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'處理程序 –