• Node.js Video Tutorials

Node.js - Net 模块



Node.js net 模块用于创建服务器和客户端。此模块提供异步网络包装器,可以使用以下语法导入。

var net = require("net")

方法

序号 方法及描述
1

net.createServer([options][, connectionListener])

创建一个新的 TCP 服务器。connectionListener 参数自动设置为 'connection' 事件的监听器。

2

net.connect(options[, connectionListener])

工厂方法,返回一个新的 'net.Socket' 并连接到指定的地址和端口。

3

net.createConnection(options[, connectionListener])

工厂方法,返回一个新的 'net.Socket' 并连接到指定的地址和端口。

4

net.connect(port[, host][, connectListener])

创建到主机上端口的 TCP 连接。如果省略主机,则假定为 'localhost'。connectListener 参数将被添加为 'connect' 事件的监听器。这是一个工厂方法,它返回一个新的 'net.Socket'。

5

net.createConnection(port[, host][, connectListener])

创建到主机上端口的 TCP 连接。如果省略主机,则假定为 'localhost'。connectListener 参数将被添加为 'connect' 事件的监听器。这是一个工厂方法,它返回一个新的 'net.Socket'。

6

net.connect(path[, connectListener])

创建到 path 的 Unix 套接字连接。connectListener 参数将被添加为 'connect' 事件的监听器。这是一个工厂方法,它返回一个新的 'net.Socket'。

7

net.createConnection(path[, connectListener])

创建到 path 的 Unix 套接字连接。connectListener 参数将被添加为 'connect' 事件的监听器。这是一个工厂方法,它返回一个新的 'net.Socket'。

8

net.isIP(input)

测试输入是否为 IP 地址。对于无效字符串返回 0,对于 IPv4 地址返回 4,对于 IPv6 地址返回 6。

9

net.isIPv4(input)

如果输入是 IPv4 地址,则返回 true,否则返回 false。

10

net.isIPv6(input)

如果输入是 IPv6 地址,则返回 true,否则返回 false。

类 - net.Server

此类用于创建 TCP 或本地服务器。

方法

序号 方法及描述
1

server.listen(port[, host][, backlog][, callback])

在指定的端口和主机上开始接受连接。如果省略主机,服务器将接受定向到任何 IPv4 地址 (INADDR_ANY) 的连接。端口值为零将分配一个随机端口。

2

server.listen(path[, callback])

启动一个本地套接字服务器,监听给定路径上的连接。

3

server.listen(handle[, callback])

handle 对象可以设置为服务器或套接字(任何具有底层 _handle 成员的对象),或者一个 {fd: <n>} 对象。它将使服务器在指定的句柄上接受连接,但假定文件描述符或句柄已绑定到端口或域套接字。在 Windows 上不支持监听文件描述符。

4

server.listen(options[, callback])

options 的 port、host 和 backlog 属性以及可选的回调函数的行为与调用 server.listen(port, [host], [backlog], [callback]) 时相同。或者,可以使用 path 选项来指定 UNIX 套接字。

5

server.close([callback])

当所有连接结束且服务器发出 'close' 事件时最终关闭。

6

server.address()

返回由操作系统报告的服务器的绑定地址、地址族名称和端口。

7

server.unref()

在服务器上调用 unref 将允许程序退出,如果这是事件系统中唯一活动的服务器。如果服务器已经 unrefd,则再次调用 unref 将没有任何效果。

8

server.ref()

unref 的反义词,在先前未引用的服务器上调用 ref 将不允许程序退出,如果它是剩下的唯一服务器(默认行为)。如果服务器已引用,则再次调用 ref 将没有任何效果。

9

server.getConnections(callback)

异步获取服务器上的并发连接数。当套接字发送到 forks 时有效。回调应接受两个参数 err 和 count。

事件

序号 事件及描述
1

listening

在调用 server.listen 后绑定服务器时发出。

2

connection

建立新连接时发出。套接字对象,连接对象可用于事件处理程序。Socket 是 net.Socket 的实例。

3

close

服务器关闭时发出。请注意,如果存在连接,则此事件直到所有连接结束才会发出。

4

error

发生错误时发出。'close' 事件将在此事件之后直接调用。

类 - net.Socket

此对象是 TCP 或本地套接字的抽象。net.Socket 实例实现双工流接口。它们可以由用户创建并用作客户端(使用 connect()),或者可以由 Node 创建并通过服务器的 'connection' 事件传递给用户。

事件

net.Socket 是一个 eventEmitter,它发出以下事件。

序号 事件及描述
1

lookup

解析主机名后但在连接之前发出。不适用于 UNIX 套接字。

2

connect

成功建立套接字连接时发出。

3

data

收到数据时发出。参数 data 将是 Buffer 或 String。数据的编码由 socket.setEncoding() 设置。

4

end

套接字的另一端发送 FIN 数据包时发出。

5

timeout

如果套接字因空闲而超时,则发出。这只是为了通知套接字处于空闲状态。用户必须手动关闭连接。

6

drain

写入缓冲区变空时发出。可用于限制上传。

7

error

发生错误时发出。'close' 事件将在此事件之后直接调用。

8

close

套接字完全关闭后发出一次。参数 had_error 是一个布尔值,指示套接字是否因传输错误而关闭。

属性

net.Socket 提供许多有用的属性,以便更好地控制套接字交互。

序号 属性及描述
1

socket.bufferSize

此属性显示当前缓冲要写入的字符数。

2

socket.remoteAddress

远程 IP 地址的字符串表示形式。例如,'74.125.127.100' 或 '2001:4860:a005::68'。

3

socket.remoteFamily

远程 IP 族系的字符串表示形式。'IPv4' 或 'IPv6'。

4

socket.remotePort

远程端口的数字表示形式。例如,80 或 21。

5

socket.localAddress

远程客户端连接的本地 IP 地址的字符串表示形式。例如,如果您正在监听 '0.0.0.0' 并且客户端连接到 '192.168.1.1',则值为 '192.168.1.1'。

6

socket.localPort

本地端口的数字表示形式。例如,80 或 21。

7

socket.bytesRead

接收到的字节数。

8

socket.bytesWritten

发送的字节数。

方法

序号 方法及描述
1

new net.Socket([options])

构造一个新的套接字对象。

2

socket.connect(port[, host][, connectListener])

为给定套接字打开连接。如果给出了 port 和 host,则套接字将作为 TCP 套接字打开,如果省略 host,则假定为 localhost。如果给出了 path,则套接字将作为 Unix 套接字打开到该路径。

3

socket.connect(path[, connectListener])

为给定套接字打开连接。如果给出了 port 和 host,则套接字将作为 TCP 套接字打开,如果省略 host,则假定为 localhost。如果给出了 path,则套接字将作为 Unix 套接字打开到该路径。

4

socket.setEncoding([encoding])

将套接字的编码设置为可读流。

5

socket.write(data[, encoding][, callback])

在套接字上发送数据。对于字符串,第二个参数指定编码——默认为 UTF8 编码。

6

socket.end([data][, encoding])

半关闭套接字,即发送 FIN 数据包。服务器仍然可能会发送一些数据。

7

socket.destroy()

确保此套接字上不再发生 I/O 活动。仅在发生错误(解析错误等)时才需要。

8

socket.pause()

暂停读取数据。也就是说,不会发出 'data' 事件。用于限制上传。

9

socket.resume()

在调用 pause() 后恢复读取。

10

socket.setTimeout(timeout[, callback])

将套接字设置为在套接字上空闲 timeout 毫秒后超时。默认情况下,net.Socket 没有超时。

11

socket.setNoDelay([noDelay])

禁用 Nagle 算法。默认情况下,TCP 连接使用 Nagle 算法,它们在发送数据之前缓冲数据。为 noDelay 设置 true 将在每次调用 socket.write() 时立即发送数据。noDelay 默认值为 true。

12

socket.setKeepAlive([enable][, initialDelay])

启用/禁用保持活动功能,并可选地设置在空闲套接字上发送第一个保持活动探测之前的初始延迟。enable 默认值为 false。

13

socket.address()

返回由操作系统报告的套接字的绑定地址、地址族名称和端口。返回一个具有三个属性的对象,例如 { port: 12346, family: 'IPv4', address: '127.0.0.1' }。

14

socket.unref()

在套接字上调用 unref 将允许程序退出,如果这是事件系统中唯一活动的套接字。如果套接字已经 unrefd,则再次调用 unref 将没有任何效果。

15

socket.ref()

unref 的反义词,在先前未引用的套接字上调用 ref 将不允许程序退出,如果它是剩下的唯一套接字(默认行为)。如果套接字已引用,则再次调用 ref 将没有任何效果。

示例

创建一个名为 server.js 的 js 文件,其中包含以下代码:

文件:server.js

var net = require('net');
var server = net.createServer(function(connection) { 
   console.log('client connected');
   
   connection.on('end', function() {
      console.log('client disconnected');
   });
   
   connection.write('Hello World!\r\n');
   connection.pipe(connection);
});

server.listen(8080, function() { 
   console.log('server is listening');
});

现在运行 server.js 查看结果:

$ node server.js

验证输出。

server is listening

创建一个名为 client.js 的 js 文件,其中包含以下代码:

文件:client.js

var net = require('net');
var client = net.connect({port: 8080}, function() {
   console.log('connected to server!');  
});

client.on('data', function(data) {
   console.log(data.toString());
   client.end();
});

client.on('end', function() { 
   console.log('disconnected from server');
});

现在从另一个终端运行 client.js 查看结果:

$ node client.js

验证输出。

connected to server!
Hello World!

disconnected from server

验证在运行 server.js 的终端上的输出。

server is listening
client connected
client disconnected
nodejs_utitlity_module.htm
广告