**This is an old revision of the document!**

组件:调制解调器

此组件由网卡提供。无线网卡的特性与普通网卡基本相同,但是当设定了信号强度时还能将信息以无线“数据包”的形式发送出去。在组网时需要用到网卡的地址,地址可通过component.modem.address获取。

组件名:modem

回调函数:

  • isWireless(): boolean
    返回此调制解调器是否可用于发送无线信息。

  • maxPacketSize(): number
    返回通过网卡传输信息时的最大数据包大小,默认为8192。你可以在OC模组的配置文件中修改此数值。
    信息中的每个值都会使信息开头添加2字节。(就算只有一个值也会添加)
    数字型变量占用8字节,true/false/nil占用4字节,字符串所占字节数与字符串本身的字节数相等,空字符串按照1字节计算。
    样例:
    • "foo"是一个5字节长的数据包;开头添加2字节,内容有3字节长的字符串。
    • "currentStatus",300是一个25字节长的数据包;开头添加4字节,内容有13字节长的字符串和一个占8字节的数字。

  • isOpen(port: number): boolean
    返回指定“端口”是否处于侦听状态。信息只有在传输到开放的端口时才会触发信号。

  • open(port: number): boolean
    开放指定编号的端口,使其开始侦听。开启成功则返回true,若已开启则返回false注: 最大端口号为65535

  • close([port: number]): boolean
    关闭指定端口(不指定则默认为全部端口)。若端口成功关闭则返回true

  • send(address: string, port: number[, ...]): boolean
    向指定地址发送一条网络信息。若信息发送成功返回 true ,但不意味着信息已被接收,只意味着已被发送。我们不提供端口嗅探功能。
    传递给此函数的所有额外参数都将被作为数据传输。这些参数必须是基本类型:支持nil、布尔型、数字型以及字符串型,而不支持表和函数。参阅serialization(序列化) API以获取将表序列化的方法。
    额外参数的数量有上限,默认限制为8。此限制可以在OC模组的配置文件中修改,但是不推荐这样做。将限制调高可能会使性能较弱的电脑不可避免地经常崩溃,而将限制调低可能会使某些协议无法工作。

  • broadcast(port: number, ...): boolean
    发送一条广播信息。此信息会被发送给所有可到达的网卡。若信息被成功发送则返回 true。请注意广播信息不会传递给发送这条信息的调制解调器自身。
    所有额外参数都将作为数据一并发送,参见send

  • getStrength(): number
    获取当前发送信息时使用的信号强度。
    仅限无线网卡。

  • setStrength(value: number): number
    设置信号强度。若此值被设定为大于0,则发送信息时会同时生成一条无线信息。若调用此函数时设定的强度超出调制解调器的最大信号强度,则会将其信号强度设定为允许的最大值。信号强度越高,发送信息时所需的能量就越多。
    仅限无线网卡。

  • getWakeMessage():string
    获取当前设置的唤醒信息。当网卡的任意端口检测到了唤醒信息(某网络数据包第一个参数中的字符串),而电脑处于关闭状态,则电脑会启动。可用于机器人、普通电脑、服务器、无人机以及平板电脑。连接卡也提供了相同的功能。

  • setWakeMessage(message: string, [fuzzy: boolean]):string
    将唤醒信息设定为给定的字符串。信息可以模糊匹配(由fuzzy参数决定,默认为false)。模糊匹配时会忽略网络数据包中的其他参数。

当收到来自其他网卡的信息时,此组件会产生名为modem_message的信号。
信号的签名为:localAddress: string, remoteAddress: string, port: number, distance: number, ...

  • localAddress为收到信息的调制解调器组件地址。
  • remoteAddress为发送信息的调制解调器地址。
  • port为信息被发送到的端口号。
  • distance为到发送信息的网卡之间的距离。此值只对无线信息有意义。对于普通信息此值总为0。
  • 其他任何值均为发送者一并传输的数据(即sendbroadcast函数中的...)。

使用例:

snippet.lua
local component = require("component")
local event = require("event")
local m = component.modem --获取首选调制解调器组件
m.open(123)
print(m.isOpen(123)) -- true
--发送信息。
m.broadcast(123, "this is a test")
--等待来自其他网卡的信息。
local _, _, from, port, _, message = event.pull("modem_message")
print("Got a message from " .. from .. " on port " .. port .. ": " .. tostring(message))

目录