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("客户端关闭连接")
})
})
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,写入了“你好”