net

net

net

net模块提供了网络相关接口。

属性与方法

名称类型参数返回值说明
interfaces方法object[]列出主机上的所有网络接口信息
dial方法network:string,address:stringConnect创建一个客户端连接到指定网络地址的网络连接
listen方法network:string,address:stringListener创建一个服务器监听某一个端口

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")

返回值

Listener

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对象代表了一个网络连接。它封装了网络通信的细节,提供了一系列用于数据交换的方法,使得开发者可以方便地进行网络编程。它也实现了ReaderWriter接口

属性与方法

名称类型参数返回值说明
setDeadline方法seconds:intvoid设置连接的最大超时时间,单位:秒
setReadDeadline方法seconds:intvoid设置输入流的最大超时时间,单位:秒
setWriteDeadline方法seconds:intvoid设置输出流的最大超时时间,单位:秒
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端口,然后发送一个httpget请求,最后打印出服务器返回的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>...
更新时间 9/19/2024, 12:09:33 PM