NodeJs簡明教程將從零開始學習NodeJs相關知識,助力JS開發者構建全棧開發技術棧!
關注獲取更多NodeJs精品文章
node
本文是NodeJs簡明教程的第九篇,將介紹NodeJs net 模塊(TCP服務端/客戶端
)相關的基本操做。服務器
傳輸控制協議(TCP,Transmission Control Protocol)是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由IETF的RFC 793 定義。
NodeJs使用net模塊
實現TCP服務端/客戶端
相關功能。微信
Echo服務器就是客戶端發送什麼,服務端就顯示什麼的一種服務端程序。主要爲了調試網絡和協議是否正常工做。
net.createServer
用來建立一個服務端,該方法原型以下:網絡
net.createServer([options][, connectionlistener]): net.Server
函數
options <Object>
學習
<boolean>
代表是否容許半開的 TCP 鏈接。默認值: false
。<boolean>
代表是否應在傳入鏈接上暫停套接字。默認值: false。<Function>
客戶端鏈接事件監聽器。回調參數爲Socket(能夠視爲一個客戶端鏈接)
返回值爲net.Server
,net.Server
主要方法以下:測試
server.listen([port[, host[, backlog]]][, callback])
ui
<number>
監聽端口<string>
監聽主機<number>
待鏈接隊列的最大長度<Function>
監聽成功回調函數server.jsspa
const net = require('net'); const server = net.createServer(function (client) { // 建立服務端 console.log(client.address().address, '鏈接成功'); // 客戶端鏈接成功時打印客戶端地址 client.on('error', function (e) { console.log(client.address().address, ' error >> ', e.message); // 鏈接錯誤時(如客戶端異常斷開) }); client.on('data', function (data) { // 收到客戶端數據 console.log(client.address().address, ' >> ', data.toString()); client.write(data); // 往客戶端寫數據 }); client.on('end', function () { // 客戶端正常斷開 console.log(client.address().address, '斷開鏈接'); }); }); server.on('error', function (e) { // 服務器錯誤(如啓動失敗,端口占用) console.log('服務器啓動失敗', e); }); server.listen(10000, function () { console.log('啓動成功,地址', server.address().address); });
node server.js
能夠看到輸出啓動成功,地址xxx
打開終端,執行telnet localhost 10000
,能夠看到輸出以下(若是不同,請加羣討論):調試
Trying ::1... Connected to localhost. Escape character is '^]'.
終端繼續輸入如下字符:
helloworld
服務端會回覆
hello world
該Echo服務器就開發已經測試經過了。雖然代碼量很少,可是演示了從零開始開發一個TCP服務器的流程,相比於C語言開發TCP服務器仍是方便不少的。
net.connect
能夠鏈接目標TCP服務器,該方法原型以下:
net.connect(port[,host][,connectionListener])
<number>
鏈接端口<string>
鏈接主機<Function>
鏈接成功的回調仍是以剛纔監聽10000
端口的服務端爲例來開發客戶端
client.js
const net = require('net'); const client = net.connect(10000, 'localhost', function () { // 鏈接服務器 console.log('鏈接服務器成功'); client.write('我是客戶端'); // 往服務端發送數據 client.on('data', function (data) { // 接收到服務端數據 console.log('服務端消息', data.toString()); client.end(); // 斷開鏈接 }); client.on('end', function () { // 鏈接斷開事件 console.log('服務端鏈接斷開'); }); });
保證服務端開啓的狀況下,執行該js,輸出以下:
鏈接服務器成功 服務端消息 我是客戶端 服務端鏈接斷開
NodeJs TCP服務端與客戶端開發到此結束,可是TCP協議的學習遠遠不止於此,包括自定義協議開發
、TCP粘包問題
等等。這一塊有問題的能夠掃碼加羣交流: