node学习—深入剖析net模块

    科技2026-02-11  18

    net模块

    一、net模块1.http请求1.普通模式2.长连接模式 2.net模块作用3.创建客户端4.创建服务器

    一、net模块

    1.http请求

    1.普通模式

    2.长连接模式

    2.net模块作用

    net是一个通信模块,利用它可以实现1. 进程间的通信。2. 网络通信TCP/IP

    3.创建客户端

    net.createConnection(options[, connectListener])

    const net = require("net"); const socket = net.createConnection({ host: 'duyi.ke.qq.com', port: 80 },()=>{ console.log("连接成功!"); });

    返回:socket socket是一个特殊的文件,在node中表现为一个双工流对象 通过向流写入内容发送数据,通过监听流的内容获取数据

    const net = require("net"); const socket = net.createConnection({ host: 'duyi.ke.qq.com', port: 80 },()=>{ console.log("连接成功!"); }); socket.on("data",chunk=>{ console.log("来自服务器的消息:",chunk.toString("utf-8")); }); socket.write("hello!");

    因为发送的hello不是一个正确的格式,所以服务器无法识别。返回400

    socket.write(`GET / HTTP/1.1 Host: duyi.ke.qq.com Connection: keep-alive `);//格式一定要一一对应!!!

    4.创建服务器

    const net = require("net"); const server = net.createServer(); server.listen(9527);//监听当前计算机中某个端口 server.on("listening",()=>{ //开始监听端口后触发的事件 console.log("server listen 9527"); });

    server.on("connection",()=>{ //当某个连接到来时,触发该事件 console.log("有客户端连接到服务器"); });

    当我访问本地:9527时就会触发connection事件了。

    //当某个连接到来时,触发该事件 server.on("connection",socket=>{ console.log("有客户端连接到服务器"); socket.on("data",chunk=>{//事件的监听函数会获得一个socket对象 console.log(chunk.toString("utf-8")); socket.write("hello!");//由于hello格式错误,所以无法返回。 socket.end(); }); socket.on("end",()=>{ console.log("连接关闭了"); }); });

    server.on("connection",socket=>{ console.log("有客户端连接到服务器"); socket.on("data",chunk=>{ console.log(chunk.toString("utf-8")); socket.write(`HTTP/1.1 200 OK <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h1>hello!</h1> </body> </html>`); socket.end(); }); socket.on("end",()=>{ console.log("连接关闭了"); }); });

    使用这样的格式才是服务器需要的返回格式(两换行符之间一定不能有空格等!!!!)。

    const net = require("net"); const server = net.createServer(); const fs = require("fs"); const path = require("path"); server.listen(9527); // 服务器监听9527端口 server.on("listening", () => { console.log("server listen 9527"); }); server.on("connection", socket => { console.log("有客户端连接到服务器"); socket.on("data", async chunk => { const filename = path.resolve(__dirname, "./hsq.jpg"); const bodyBuffer = await fs.promises.readFile(filename); const headBuffer = Buffer.from(`HTTP/1.1 200 OK Content-Type: image/jpeg //返回数据的类型 `, "utf-8" ); const result = Buffer.concat([headBuffer, bodyBuffer]); socket.write(result); socket.end(); }); socket.on("end", () => { console.log("连接关闭了"); }); });

    socket对象: 可能存在多个客户端连接9527端口,每个连接都会产生新的socket。

    Processed: 0.015, SQL: 9