net
net
net
net模块提供了网络相关接口。
属性与方法
名称 | 类型 | 参数 | 返回值 | 说明 |
---|---|---|---|---|
interfaces | 方法 | object[] | 列出主机上的所有网络接口信息 | |
dial | 方法 | network:string,address:string | Connect | 创建一个客户端连接到指定网络地址的网络连接 |
listen | 方法 | network:string,address:string | Listener | 创建一个服务器监听某一个端口 |
interfaces
列出主机上的所有网络接口信息
示例
import {net} from 'core';
console.log(net.interfaces())
结果
[
{
name: lo0, // 接口名称
mac: ,//mac地址
flags: up|loopback|multicast|running, // 标志位,表示网络接口的特性,如是否启用、是否是回环接口等
mtu: 16384, // 最大传输单元
addrs: [ {
loopBack: true, //是否是回环接口
type: v4, //协议类型
ip: 127.0.0.1, // IP 地址
mask: ff000000, // 子网掩码
string: 127.0.0.1/8,//地址的字符串表示
network: ip+net, // 返回地址的网络类型,如 "tcp", "udp", "ip"
}]
}
]
dial
用于创建一个客户端连接到某一个服务器。
语法
net.dial(network:string,address:string);
参数
- network: 协议类型
- address: 连接的服务器地址,格式为:host+":"+port,例如
127.0.0.1:8080
。
返回值
Connect
对象
示例
import {net} from 'core';
let conn = net.dial("tcp","127.0.0.1:8888");
listen
用于创建一个网络监听对象,它监听应用程序指定的网络地址上的传入连接。这个方法通常用于服务器端的应用程序,以便它可以接受来自客户端的连接请求,并与之建立TCP或其他类型的网络连接。
语法
net.listen(network:string,address:string);
参数
- network: 协议类型
- address: 监听的本机地址,格式为:ip+":"+port,例如
127.0.0.1:8080
。ip地址可以省略,例如:8080
表示监听本机ip
示例
let listener = net.listen("tcp", ":8080")
返回值
network 类型
- tcp: 代表TCP(传输控制协议)连接,是最常用的基于连接的、可靠的字节流服务。
- tcp4: 仅使用IPv4的TCP连接。
- tcp6: 仅使用IPv6的TCP连接。
- udp: 代表UDP(用户数据报协议)连接,是一个无连接的、不可靠的消息传输服务。
- udp4: 仅使用IPv4的UDP连接。
- udp6: 仅使用IPv6的UDP连接。
- ip: 原始IP数据包协议。
- ip4: 仅IPv4的原始IP数据包协议。
- ip6: 仅IPv6的原始IP数据包协议。
- unix: Unix域套接字(仅限同一台机器上的进程间通信),用于流式通信。
- unixgram: Unix域套接字,用于数据报式通信。
- unixpacket: Unix域套接字,用于面向包的通信。
Listener
监听器对象的方法
名称 | 类型 | 参数 | 返回值 | 说明 |
---|---|---|---|---|
accept | 方法 | Connect | 接收一次连接,返回一个connect对象 |
accept
accept()
方法用于等待并返回下一个来自监听器 Listener 的连接。Accept 是 Listener 的一个方法,它阻塞等待直到一个新的连接到达,然后返回一个connect实例,这个实例代表了新的连接。通过这个返回的连接,服务器可以读取数据、写入响应数据、关闭连接等。
let listener = net.listen("tcp", "8080");
while (true) {
let con = listener.accept();
}
Connect
Connect
对象代表了一个网络连接。它封装了网络通信的细节,提供了一系列用于数据交换的方法,使得开发者可以方便地进行网络编程。它也实现了Reader
和Writer
接口
属性与方法
名称 | 类型 | 参数 | 返回值 | 说明 |
---|---|---|---|---|
setDeadline | 方法 | seconds:int | void | 设置连接的最大超时时间,单位:秒 |
setReadDeadline | 方法 | seconds:int | void | 设置输入流的最大超时时间,单位:秒 |
setWriteDeadline | 方法 | seconds:int | void | 设置输出流的最大超时时间,单位:秒 |
remoteAddr | 属性 | object | 远程主机地址信息 | |
localAddr | 属性 | object | 本地主机地址信息 |
setDeadline
设置连接的最大超时时间
语法
conn.setDeadline(seconds:int);
参数
- seconds: 超时时间,单位:秒
示例
import {net} from 'core';
let conn = net.dial('tcp', '127.0.0.1:8080');
conn.setDeadline(10);
setReadDeadline
设置输入流的最大超时时间
语法
conn.setReadDeadline(seconds:int);
参数
- seconds: 超时时间,单位:秒
示例
import {net} from 'core';
let conn = net.dial('tcp', '127.0.0.1:8080');
conn.setReadDeadline(10);
setWriteDeadline
设置输出流的最大超时时间
语法
conn.setWriteDeadline(seconds:int);
参数
- seconds: 超时时间,单位:秒
示例
import {net} from 'core';
let conn = net.dial('tcp', '127.0.0.1:8080');
conn.setWriteDeadline(10);
remoteAddr
远程主机地址信息
示例
import {net} from 'core';
let conn = net.dial('tcp', '127.0.0.1:8080');
console.log(conn.remoteAddr)
结果
{
loopBack: true, //是否回环地址
type: v4, //协议类型
ip: 127.0.0.1, //ip地址
string: 127.0.0.1:8080,//ip地址和端口号
network: tcp, //网络类型
}
localAddr
本地主机地址信息
示例
import {net} from 'core';
let conn = net.dial('tcp', '127.0.0.1:8080');
console.log(conn.localAddr)
结果
{
loopBack: true,//是否回环地址
type: v4,//协议类型
ip: 127.0.0.1, //ip地址
string: 127.0.0.1:57714,//ip地址和端口号
network: tcp,//网络类型
}
案例
向网络连接输入和输出数据。
这个案例中演示了如果通过vino
进行网络开发,首先创建一个tcp
连接到服务器的80
端口,然后发送一个http
的get
请求,最后打印出服务器返回的http
响应信息。
import {net} from 'core';
//建立tcp连接
let conn = net.dial('tcp', 'www.baidu.com:80');
//将conn作为输出流并发送数据,(模拟http get请求)
conn.write("GET / HTTP/1.0\r\n\r\n");
//将conn作为输入流并接收数据,将数据一次性读入到buffer中
let buffer = conn.read();
//将内存的buffer转为字符串打印
console.log(buffer.toString());
//关闭连接
conn.close();
结果
HTTP/1.0 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 9508
Content-Type: text/html
Date: Tue, 16 Jul 2024 10:20:05 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
<!DOCTYPE html>...