跳轉到內容

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 - 錯誤程式碼。
華夏公益教科書