創(chuàng)建TCP服務(wù)器
Node.js中提供?.NET模塊,用來實現(xiàn)TCP服務(wù)器與TCP客戶端之間的通信。
當(dāng)我們使用JAVAScript來開發(fā)服務(wù)端的時候,只需要調(diào)用net模塊就可以了。比如現(xiàn)在要創(chuàng)建一個TCP服務(wù)器,代碼如下:App.js
const net = require("net");
const server = net.createServer(() => {
console.log("客戶端與服務(wù)器端連接已經(jīng)建立")
})
server.listen("8000", 'localhost', function () {
console.log("服務(wù)端開始監(jiān)聽")
console.log("地址信息:",server.address())
})
這是簡單的一個TCP通信,現(xiàn)在執(zhí)行命令:node app.js
在瀏覽器輸入localhost:8000。
這是終端的信息:
服務(wù)端開始監(jiān)聽
地址信息: { address: '127.0.0.1', family: 'IPv4', port: 8000 }
客戶端與服務(wù)器端連接已經(jīng)建立
我們的瀏覽器輸入localhost:8000回車后,就是客戶端與服務(wù)端建立的TCP通信。啟動服務(wù)端,但是客戶端沒有連接,終端信息如下:
服務(wù)端開始監(jiān)聽
地址信息: { address: '127.0.0.1', family: 'IPv4', port: 8000 }
createServer方法返回被創(chuàng)建的TCP服務(wù)器,它的回調(diào)函數(shù)有一個參數(shù),是TCP服務(wù)器監(jiān)聽的socket端口對象。這是在createServer的回調(diào)函數(shù)中監(jiān)聽connection事件。
然而,我們可以單獨對connection事件進行監(jiān)聽:
const net = require("net")
const server = net.createServer();
server.listen(8000, 'localhost', function () {
console.log('地址信息:', server.address())
});
server.on("connection", function (socket) {
console.log('客戶端開始已經(jīng)連接');
socket.setEncoding('utf8'); // 設(shè)置內(nèi)容格式
socket.on("data", function (res) {
console.log("data==", socket.bytesRead)
});
socket.on('end', function () {
console.log("客戶端關(guān)閉連接")
})
})
現(xiàn)在我們建立好了TCP服務(wù)器。
可以使用socket對象的pipe方法將客戶端發(fā)送的數(shù)據(jù)流寫入到其他文件中去:
客戶端的完整代碼:
const net = require("net")
const server = net.createServer();
const file = require('fs').createWriteStream('./text.txt');
server.listen(8000, 'localhost', function () {
console.log('地址信息:', server.address())
});
server.on("connection", function (socket) {
console.log('客戶端開始已經(jīng)連接');
socket.setEncoding('utf-8'); // 設(shè)置內(nèi)容格式
socket.on("data", function (res) {
console.log("data==", socket.bytesRead)
});
socket.pause();
socket.resume();
socket.pipe(file, { end: false });
// 客戶端關(guān)閉連接時候,添加的結(jié)束標志
socket.on("end", function () {
file.end("結(jié)束了");
socket.unpipe(file); // 取消對文件的寫入
})
socket.on('end', function () {
console.log("客戶端關(guān)閉連接")
})
})
創(chuàng)建TCP客戶端
const net = require("net");
const client = new net.Socket();
client.setEncoding("utf8");
client.connect(8000, 'localhost', function () {
console.log('已經(jīng)連接服務(wù)器了');
client.write('你好')
});
client.on('data', function (data) {
console.log("服務(wù)器發(fā)送的數(shù)據(jù)", data)
})
客戶端連接服務(wù)端后,服務(wù)端的日志文件text.txt,寫入了“你好”