net 模块
net.SocketAddress
创建 SocketAddress
import net from 'net'
// new net.SocketAddress([options])
const sa = net.SocketAddress({
address: 127.0.0.1 // IPv4 默认为 127.0.0.1, IPv6 默认为 ::
family: ipv4 // ipv4 或 ipv6, 默认为 ipv4
port: 1111 // 端口
})
属性
socketAddress.address;
socketAddress.family;
socketAddress.port;
TCP server
创建 TCP server
import net from "net";
// net.createServer([options][, connectionListener])
// new net.Server 的语法糖, connectionListener 自动设置为 connection 事件的监听器
const server = net.createServer(function (socket) {
socket.on("data", function (data) {
// 接受数据
console.log(data);
// 返回数据
socket.write("test");
});
socket.on("close", function () {
console.log("close");
});
});
// new net.Server([options][, connectionListener])
// 等效 net.createServer()
事件
// server 关闭触发
server.on("close", () => {
//
});
// 建立新链接连接触发
server.on("connection", (socket) => {
//
});
// 连接报错触发
server.on("error", (error) => {
//
});
// server.listen() 事件后触发
server.on("listening", () => {
//
});
// 连接数量超过 server.maxConnections, 丢弃连接触发
server.on("drop", (data) => {
//
});
方法
// 服务器 address 信息
server.address(); // { port: 12346, family: 'IPv4', address: '127.0.0.1' }.
// server.close([callback])
// 关闭 server
// 等待正在处理的请求
// 正常停止触发 close 事件
// 异常停止触发 error 事件
server.close((error) => {
//
});
// server.getConnections(callback)
// 获得连接数量
server.getConnections((err, count) => {
//
});
// server.listen()
// 启动 server 服务并监听 listen 端口
server.listen(PORT, HOST, function () {
console.log("Server start.");
});
属性
server.listening; // 是否监听连接
server.maxConnections; // 最大连接数量
TCP socket
创建 socket
import net from "net";
const PORT = 3000;
const HOST = "127.0.0.1";
// net.createConnection(port[, host][, connectListener])
// new net.Socket 的语法糖, connectionListener 自动设置为 connect 事件的监听器
const client = net.createConnection(PORT, HOST, () => {
// connect event
});
// new net.Socket([options])
// 等效 net.createConnection()
事件
const client = net.createConnection(PORT, HOST);
// socket 关闭触发
client.on("close", (hadError) => {
//
});
// socket 连接成功触发
client.on("connect", () => {
//
});
// socket 接受数据触发
client.on("data", (buffer) => {
//
});
// socket write buffer 变空触发
client.on("drain", () => {
//
});
// socket 收到 FIN 或 socket.end() 触发
client.on("end", () => {
//
});
// socket 报错触发
client.on("error", (error) => {
//
});
// socket 连接已经准备好使用, connect 事件后立刻触发
client.on("ready", (error) => {
//
});
// socket 连接超时触发
client.on("timeout", (error) => {
//
});
方法
// 返回 socket 的链接
socket.address(); // { port: 12346, family: 'IPv4', address: '127.0.0.1' }
// socket.connect(port[, host][, connectListener])
// 初始化 socket 连接, 仅能在 close 事件后恢复 socket 连接使用;
// 通常不需要该方法
socket.connect(PORT, HOST, () => {
// connect event
});
// socket.destroy([error])
// 立刻销毁 socket 连接, 不等待正在处理的链接;
// socket.destroy() 只需要任意一方调用一次即可;
socket.destroy();
// socket.end([data[, encoding]][, callback])
// 关闭 socket 的连接, 发送一个 FIN, 服务器仍有可能发送一些数据;
// socket.end() 只需要任意一方调用一次即可
socket.end("end", (encoding = "utf8"), () => {
//
});
// socket.pause()
// 暂停读取数据
socket.pause();
// socket.resume()
// 恢复读取数据
socket.resume();
// socket.setEncoding([encoding])
// 设置字符编码
socket.setEncoding("utf8");
// socket.setKeepAlive([enable][, initialDelay])
// 启用/停止 keepAlive
// socket.setNoDelay([noDelay])
// socket.setTimeout(timeout[, callback])
// 设置超时时间
socket.setTimeout(3000);
socket.on("timeout", () => {
console.log("socket timeout");
socket.end();
});
// socket.write(data[, encoding][, callback])
// 发送数据
socket.write("data", (encoding = "utf8"), () => {
//
});
属性
socket.bytesRead; // 接受的字节数量
socket.bytesWritten; // 发送的字节数量
socket.connecting; // socket 是否正在连接
socket.destroyed; // socket 是否销毁
socket.localAddress; // 本机 ip
socket.localPort; // 本机端口
socket.localFamily; // 本机 ip 协议
socket.pending; // socket 尚未连接或处于正在连接过程
socket.remoteAddress; // 远程 ip
socket.remotePort; // 远程端口
socket.remoteFamily; // 远程 ip 协议
socket.timeout; // 超时时间
布尔运算
布尔运算
// net.isIP(input)
net.isIP("::1"); // returns 6
net.isIP("127.0.0.1"); // returns 4
net.isIP("127.000.000.001"); // returns 0
net.isIP("127.0.0.1/24"); // returns 0
net.isIP("fhqwhgads"); // returns 0
// net.isIPv4(input)
net.isIPv4("127.0.0.1"); // returns true
net.isIPv4("127.000.000.001"); // returns false
net.isIPv4("127.0.0.1/24"); // returns false
net.isIPv4("fhqwhgads"); // returns false
// net.isIPv6(input)
net.isIPv6("::1"); // returns true
net.isIPv6("fhqwhgads"); // returns false