node.js當中net模塊的簡單應用(基於控制檯的點對點通訊)

咱們可使用node.js當中內置的net模塊來建立socket服務端和socket客戶端,實現一個簡單的基於控制檯的點對點通訊。node

1、利用net模塊創建socket客戶端

一、引包
const net = require('net');
二、與指定IP地址和端口號的服務端創建鏈接
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());
    });
});

2、利用net模塊創建socket服務端

一、引包
const net = require('net');
二、建立一個socket服務端
const server = net.createServer((socket)=>{

});

這裏表示建立了一個socket服務器,並用一個自定義的server變量來接收,當有客戶端與該服務端創建鏈接時,會觸發執行該回調函數,而且回調函數內部使用指定的形參socket對象。函數

3.讓新建立的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

圖片描述

相關文章
相關標籤/搜索