net是一个通信模块,利用它可以实现1. 进程间的通信。2. 网络通信TCP/IP
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 `);//格式一定要一一对应!!!当我访问本地: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。
