NodeJs簡明教程將從零開始學習NodeJs相關知識,助力JS開發者構建全棧開發技術棧!node
關注獲取更多NodeJs精品文章
服務器
本文是NodeJs簡明教程的第九篇,將介紹NodeJs net 模塊(TCP服務端/客戶端
)相關的基本操做。微信
傳輸控制協議(TCP,Transmission Control Protocol)是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由IETF的RFC 793 定義。網絡
NodeJs使用net模塊
實現TCP服務端/客戶端
相關功能。函數
Echo服務器就是客戶端發送什麼,服務端就顯示什麼的一種服務端程序。主要爲了調試網絡和協議是否正常工做。學習
net.createServer
用來建立一個服務端,該方法原型以下:測試
net.createServer([options][, connectionlistener]): net.Server
ui
<Object>
<boolean>
代表是否容許半開的 TCP 鏈接。默認值: false
。<boolean>
代表是否應在傳入鏈接上暫停套接字。默認值: false。<Function>
客戶端鏈接事件監聽器。回調參數爲Socket(能夠視爲一個客戶端鏈接)
返回值爲net.Server
,net.Server
主要方法以下:spa
server.listen([port[, host[, backlog]]][, callback])
調試
<number>
監聽端口<string>
監聽主機<number>
待鏈接隊列的最大長度<Function>
監聽成功回調函數server.js
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粘包問題
等等。這一塊有問題的能夠掃碼加羣交流: