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