跳转到内容

Alcor6L/eLua/net

来自维基教科书,开放世界开放书籍

此模块包含从 eLua 访问 TCP/IP 网络的函数。 只有在启用网络支持的情况下才能启用它(有关详细信息,请参阅构建)。

注意:eLua 中的 TCP/IP 支持尚处于实验阶段。 虽然功能齐全,但速度仍然很慢,并且存在许多其他问题。 它在未来很可能会发生重大变化,因此请预计此模块也会发生重大变化。 eLua 仅支持 TCP 套接字。

大多数网络函数返回一个错误代码,以说明操作是否成功。

  • net.ERR_OK - 操作成功。
  • net.ERR_TIMEDOUT - 操作超时
  • net.ERR_CLOSED - 您尝试连接到已关闭的端口
  • net.ERR_ABORTED - 操作中止
  • net.ERR_OVERFLOW - 操作溢出

net.packip

[编辑 | 编辑源代码]

返回 IP 地址的内部表示形式,该地址可用于 net 模块中所有期望 IP 地址参数的函数。 IP 被认为是 ip1.ip2.ip3.ip4 格式。

ip = net.packip( ip1, ip2, ip3, ip4 )
  • ip1 - IP 地址的第一部分。
  • ip2 - IP 地址的第二部分。
  • ip3 - IP 地址的第三部分。
  • ip4 - IP 地址的第四部分。
ip = net.packip( str )
  • str - 字符串格式的 IP 地址,例如 '192.168.1.1'。

返回

  • ip - 以内部格式编码 IP 地址的整数。

net.unpackip

[编辑 | 编辑源代码]

返回由 net.packip 编码的 IP 地址的解包表示形式。

ip1, ip2, ip3, ip4 = net.unpackip( ip, '*n' )
  • ip - 编码的 IP 地址。

返回

  • ip1 - IP 地址的第一部分。
  • ip2 - IP 地址的第二部分。
  • ip3 - IP 地址的第三部分。
  • ip4 - IP 地址的第四部分。
ip = net.unpackip( ip, '*s' )
  • ip - 编码的 IP 地址。

返回

  • ip - 字符串格式的 IP 地址。

net.lookup

[编辑 | 编辑源代码]

执行 DNS 查找。

ip = net.lookup( hostname )
  • hostname - 计算机的名称。

返回

  • ip - 计算机的 IP 地址。

net.socket

[编辑 | 编辑源代码]

创建用于 TCP/IP 通信的套接字。

socket = net.socket( type )
  • type - 可以是 net.SOCK_STREAM 用于 TCP 套接字或 net.SOCK_DGRAM 用于 UDP 套接字(尚未支持)。

返回:将在后续操作中使用的套接字。

net.close

[编辑 | 编辑源代码]

关闭套接字。

res = net.close( socket )
  • socket - 要关闭的套接字。

返回

  • res - 错误代码。

net.connect

[编辑 | 编辑源代码]

将套接字连接到远程系统。

err = net.connect( sock, ip, port )
  • sock - 从 net.socket 获取的套接字。
  • ip - 从 net.packip 获取的 IP 地址。
  • port - 要连接到的端口。

返回

  • err - 错误代码。

net.accept

[编辑 | 编辑源代码]

接受来自远程系统(可选超时)的连接。

socket, remoteip, err = net.accept( port, [timer_id, timeout] )
  • port - 等待来自远程系统的连接的端口。
  • timer_id(可选) - 用于测量超时的计时器的 ID。 使用 nil 或 tmr.SYS_TIMER 指定系统计时器。
  • timeout(可选) - 操作超时,可以是 net.NO_TIMEOUT 或 0 用于非阻塞操作,net.INF_TIMEOUT 用于阻塞操作,或者一个正数,指定超时时间(微秒)。 此参数的默认值为 unet.INF_TIMEOUT。

返回

  • socket - 接受远程连接后创建的套接字。
  • remoteip - 远程系统的 IP。
  • err - 错误代码。

将数据发送到套接字。

res, err = net.send( sock, str )
  • sock - 套接字。
  • str - 要发送的数据。

返回

  • res - 实际发送的字节数或 -1 表示错误。
  • err - 错误代码。

从套接字读取数据。

res, err = net.recv( sock, format, [timer_id, timeout] )
  • sock - 套接字。
  • format - 如何读取数据。 这可以是:
    • "*l": 读取一行(直到下一个 '\n' 字符)。
    • 整数:读取最多这么多字节。
  • timer_id(可选) - 用于测量超时的计时器的 ID。 使用 nil 或 tmr.SYS_TIMER 指定系统计时器。
  • timeout(可选) - 操作超时,可以是 net.NO_TIMEOUT 或 0 用于非阻塞操作,net.INF_TIMEOUT 用于阻塞操作,或者一个正数,指定超时时间(微秒)。 此参数的默认值为 net.INF_TIMEOUT。

返回

  • res - 读取的字节数。
  • err - 错误代码。
华夏公益教科书