咱們可使用node.js
當中內置的net
模塊來建立socket
服務端和socket
客戶端,實現一個簡單的基於控制檯的點對點通訊。node
net
模塊創建socket
客戶端const net = require('net');
const client = net.connect({port:number,host:string},()=>{ });
其中port
參數填寫數值類型的服務端的端口號,host
參數填寫字符串類型的服務端的IP
地址。若host
參數不寫,則默認與本機上的指定端口創建鏈接。當這個新建的客戶端與指定的服務端創建了鏈接以後,觸發該回調函數,該回調函數沒有參數,回調函數內部用自定義的變量client
來表明這個客戶端。服務器
在該客戶端與服務端完成鏈接創建的回調函數以內,使用client.write();
能夠完成從客戶端向服務端發送數據,使用client.on('data',(chunk)=>{});
能夠接收服務端發送的數據,當接收到服務端發送的數據時觸發該回調函數,chunk.toString()
便可獲取服務端發送的數據內容。
如下爲client.js
的示例代碼:socket
const readline = require('readline'); const net = require('net'); const rl = readline.createInterface(process.stdin,process.stdout); const client = net.connect({port:2080,host:'192.168.155.1'},()=>{ rl.on('line',(line)=>{ client.write(line.trim()); }); client.on('data',(chunk)=>{ console.log(chunk.toString()); }); });
net
模塊創建socket
服務端const net = require('net');
socket
服務端const server = net.createServer((socket)=>{ });
這裏表示建立了一個socket
服務器,並用一個自定義的server
變量來接收,當有客戶端與該服務端創建鏈接時,會觸發執行該回調函數,而且回調函數內部使用指定的形參socket
對象。函數
socket
服務端監聽一個指定的端口。建立完socket服務端以後,必須讓其監聽該操做系統上的某一個特定端口,不然沒有任何意義。ui
var port = 2080; server.listen(port,(err)=>{ if(err){ console.log('該端口被佔用!'); return false; }; console.log(`服務端正常啓動,監聽${port}端口!`); });
爲了不出現端口被佔用的狀況出現,能夠令
port=0;
,0不是一個標準的端口號,傳0的效果爲系統會隨機分配一個當前操做系統當中未被佔用的端口號。spa
在第2步的回調函數當中,使用socket.remoteAddress
能夠獲得與本機相鏈接的那個遠端客戶端的IP
地址,使用socket.remotePort
能夠獲得與本機相鏈接的那個遠端客戶端的端口號,使用socket.localAddress
能夠獲得本機的IP地址,使用socket.localPort
能夠獲得該socket
服務器所使用的端口號。
使用socket.write();
能夠完成從服務端向客戶端發送數據,使用socket.on('data',(chunk)=>{});
能夠接收客戶端發送的數據,當接收到客戶端發送的數據時觸發該回調函數,chunk.toString()
便可獲取客戶端發送的數據內容。
如下爲socket.js
的示例代碼:操作系統
const net = require('net'); const readline = require('readline'); const rl = readline.createInterface(process.stdin,process.stdout); const server = net.createServer((socket)=>{ rl.on('line',(line)=>{ socket.write(line.trim()); }); socket.on('data',(chunk)=>{ console.log(chunk.toString()); }); }); var port = 2080; server.listen(port,(err)=>{ if(err){ console.log('該端口被佔用!'); return false; }; console.log(`服務端正常啓動,監聽${port}端口!`); });
先在控制檯上啓動server.js
,而後再啓動client.js
文件,接下去便可在兩個端之間實現基於控制檯的點對點收發消息。以下圖所示。code