試想一下,上機課,你和你心愛的姑娘坐了好遠好遠宵蛀,三個小時的寂寞昆著,誰能懂,在機房术陶,或信號差凑懂,或老師管的嚴,不讓玩手機梧宫。
又試想一下接谨,上機課,你想在你心愛的姑娘面前表現(xiàn)出一副大牛的樣子塘匣,這樣脓豪,之后課設(shè),作業(yè)馆铁,她便會不自居的向你靠來跑揉,成為人贏,就在現(xiàn)在埠巨。
這篇文章教大家做一個局域網(wǎng)的簡易聊天室,二百行代碼现拒,實現(xiàn)你的裝嗶~夢辣垒。
前期準備,部署 node 環(huán)境勋桶。
為什么要用NODE例驹?它足夠小,比JAVA /C++ 部署方便得多退唠,JS夠簡單瞧预,記事本就能寫出你華麗的代碼盆驹。廢話不多說,開始廉丽。
用到API璃诀,node.net.
//首先建立服務(wù)端
```
constnet = require('net');
// 用于存儲所有的連接
var clients = [];
var port =2080; //定義服務(wù)器端口
server.listen(port, (err) => {
if(err) {
console.log('端口被占用');
return false;
}
console.log(`服務(wù)端正常啟動監(jiān)聽【${port}】端口`);
})
varserver = net.createServer((socket) => {
clients.push(socket);
console.log(`Welcome${socket.remoteAddress}to ${port} chatroom`);
functionboardcast(signal) {
console.log(signal);
// 肯定有用戶名和消息
var username = signal.from;
var message = signal.message;
// 我們要發(fā)給客戶端的東西
var send = {
procotol: signal.procotol,
from: username,
message: message
};
// 廣播消息
clients.forEach(client=> {
client.write(JSON.stringify(send));
});
}
// 有任何客戶端發(fā)消息都會觸發(fā)
socket.on('data', (chunk) => {
try{
var signal = JSON.parse(chunk.toString().trim());
var procotol = signal.procotol;
switch(procotol) {
case'boardcast':
boardcast(signal);
break;
default:
socket.write('啥凿将,你想吃日新樓?');
break;
}
}catch(error) {
socket.write('弄啥咧犀变!');
}
});
});
```
具體思路,設(shè)置服務(wù)器監(jiān)聽端口,客戶端接入時懦傍,列入數(shù)組,有消息進來,選擇消息傳播方式废麻。這里設(shè)置boardcast 廣播模式,消息循環(huán)發(fā)送到所有客戶端慎冤,完成簡易聊天功能。
下面開始完成客戶端
```
// 創(chuàng)建于服務(wù)端的連接
varserver = net.connect({ port:2080, host:'/*你機器的端口*/'}, () => {
console.log(`Welcome${name}to 2080 chatroom`);
// 監(jiān)聽服務(wù)端發(fā)過來的數(shù)據(jù)
server.on('data', (chunk) => {
try{
var signal = JSON.parse(chunk.toString().trim());
var procotol = signal.procotol;
switch(procotol) {
case'boardcast':?
//廣播模式接受數(shù)據(jù)。
console.log('\nboardcast');
console.log(signal.from +'>');
console.log(signal.message);?
//收到聊天內(nèi)容打印出來
rl.prompt();?
break;
default:
server.write('中午吃啥');
break;
}
}catch(error) {
server.write('弄啥咧唱歧!');
}
});
rl.setPrompt(name +'> ');
rl.prompt();
rl.on('line', (line) => {
var send = {
procotol:'boardcast',
from: name,
message: line.toString().trim()
};
server.write(JSON.stringify(send));
rl.prompt();
}).on('close', () => {
});
});
});
```
思路,訪問監(jiān)聽的端口號,輸入用戶名和消息,發(fā)送至服務(wù)端,服務(wù)端接受后置逻,循環(huán)廣播至每個客戶端肺素,實現(xiàn)聊天功能恨锚。
學弟學妹們,你們下學期的課設(shè)倍靡,有一項加分項就是實現(xiàn)聊天功能,代碼放到這里咯他挎。不懂隨時來問。