Component/modem/zh: Difference between revisions

From OpenComputers: Rebooted
Jump to navigation Jump to search
imported>OCDoc Import
Imported from legacy OpenComputers documentation at ocdoc.cil.li
 
Clean up Markdown artifacts from DokuWiki migration
 
Line 1: Line 1:
= 组件:调制解调器 =
= 组件:调制解调器 =


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


组件名:`modem`。
组件名:<code>modem</code>。


回调函数:
回调函数:


* `isWireless(): boolean`
* <code>isWireless(): boolean</code>


<pre>返回此调制解调器是否可用于发送无线报文。
<pre>返回此调制解调器是否可用于发送无线报文。
</pre>
</pre>


* `maxPacketSize(): number`
* <code>maxPacketSize(): number</code>


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


* `isOpen(port: number): boolean`
* <code>isOpen(port: number): boolean</code>


<pre>返回指定“端口”是否处于侦听状态。报文只有在传输到开放的端口时才会触发信号。
<pre>返回指定“端口”是否处于侦听状态。报文只有在传输到开放的端口时才会触发信号。
</pre>
</pre>


* `open(port: number): boolean`
* <code>open(port: number): boolean</code>


<pre>开放指定编号的端口,使其开始侦听。开启成功则返回`true`,若已开启则返回`false`。**注: 最大端口号为65535**
<pre>开放指定编号的端口,使其开始侦听。开启成功则返回true,若已开启则返回false。**注: 最大端口号为65535**
</pre>
</pre>


* `close([port: number]): boolean`
* <code>close([port: number]): boolean</code>


<pre>关闭指定端口(不指定则默认为全部端口)。若端口成功关闭则返回`true`。 
<pre>关闭指定端口(不指定则默认为全部端口)。若端口成功关闭则返回true。
</pre>
</pre>


* `send(address: string, port: number[, ...]): boolean`
* <code>send(address: string, port: number[, ...]): boolean</code>


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


* `broadcast(port: number, ...): boolean`
* <code>broadcast(port: number, ...): boolean</code>


<pre>发送一条广播报文。此报文会被发送给所有可到达的网卡。若报文被成功发送则返回 `true`。请注意广播报文**不会**传递给发送这条报文的调制解调器自身。
<pre>发送一条广播报文。此报文会被发送给所有可到达的网卡。若报文被成功发送则返回 true。请注意广播报文**不会**传递给发送这条报文的调制解调器自身。
所有额外参数都将作为数据一并发送,参见`send`。 
所有额外参数都将作为数据一并发送,参见send。
</pre>
</pre>


* `getStrength(): number`
* <code>getStrength(): number</code>


<pre>获取当前发送报文时使用的信号强度。
<pre>获取当前发送报文时使用的信号强度。
</pre>
</pre>
'''仅限无线网卡。'''
'''仅限无线网卡。'''
* `setStrength(value: number): number`
* <code>setStrength(value: number): number</code>


<pre>设置信号强度。若此值被设定为大于0,则发送报文时会同时生成一条无线报文。若调用此函数时设定的强度超出调制解调器的最大信号强度,则会将其信号强度设定为允许的最大值。信号强度越高,发送报文时所需的能量就越多。
<pre>设置信号强度。若此值被设定为大于0,则发送报文时会同时生成一条无线报文。若调用此函数时设定的强度超出调制解调器的最大信号强度,则会将其信号强度设定为允许的最大值。信号强度越高,发送报文时所需的能量就越多。
</pre>
</pre>
'''仅限无线网卡。'''
'''仅限无线网卡。'''
* `getWakeMessage():string`
* <code>getWakeMessage():string</code>


<pre>获取当前设置的唤醒消息。当电脑处于关闭状态时,网卡的任意端口接收到了唤醒消息(某网络数据包第一个参数中的字符串),则电脑会启动。此功能可用于机器人、普通电脑、服务器、无人机以及平板电脑。[[Component/tunnel/zh|连接卡]]也提供了相同的功能。
<pre>获取当前设置的唤醒消息。当电脑处于关闭状态时,网卡的任意端口接收到了唤醒消息(某网络数据包第一个参数中的字符串),则电脑会启动。此功能可用于机器人、普通电脑、服务器、无人机以及平板电脑。[[Component/tunnel/zh|连接卡]]也提供了相同的功能。
</pre>
</pre>


* `setWakeMessage(message: string, [fuzzy: boolean]):string`
* <code>setWakeMessage(message: string, [fuzzy: boolean]):string</code>


<pre>将唤醒消息设定为给定的**字符串**。消息可以模糊匹配(由`fuzzy`参数决定,默认为`false`)。模糊匹配时会忽略网络数据包中的其他参数。
<pre>将唤醒消息设定为给定的**字符串**。消息可以模糊匹配(由fuzzy参数决定,默认为false)。模糊匹配时会忽略网络数据包中的其他参数。
</pre>
</pre>
当收到来自其他网卡的报文时,此组件会产生名为`modem_message`的信号。 信号的签名为:`localAddress: string, remoteAddress: string, port: number, distance: number, ...`。
当收到来自其他网卡的报文时,此组件会产生名为<code>modem_message</code>的信号。 信号的签名为:<code>localAddress: string, remoteAddress: string, port: number, distance: number, ...</code>。


* `localAddress`为收到报文的调制解调器组件地址。 - `remoteAddress`为发送报文的调制解调器地址。 - `port`为报文被发送到的端口号。 - `distance`为到发送报文的网卡之间的距离。此值只对无线报文有意义。对于普通报文此值总为0。 - 其他所有值均为发送者一并传输的数据(即`send`与`broadcast`函数中的`...`)。
* <code>localAddress</code>为收到报文的调制解调器组件地址。 - <code>remoteAddress</code>为发送报文的调制解调器地址。 - <code>port</code>为报文被发送到的端口号。 - <code>distance</code>为到发送报文的网卡之间的距离。此值只对无线报文有意义。对于普通报文此值总为0。 - 其他所有值均为发送者一并传输的数据(即<code>send</code>与<code>broadcast</code>函数中的<code>...</code>)。


使用例: ```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)) ```
使用例: <syntaxhighlight lang="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))
</syntaxhighlight>


== 目录 ==
== 目录 ==


{{:Component/contents/zh}}
{{:Component/contents/zh}}

Latest revision as of 20:27, 24 August 2026

组件:调制解调器

此组件由网卡提供。无线网卡的特性与普通网卡基本相同,但是当设定了信号强度时还能将报文以无线“数据包”的形式发送出去。在组网时需要用到网卡的地址,地址可通过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、布尔型、数字型以及字符串型,而不支持表和函数。参阅[[API/serialization/zh|serialization(序列化) API]]以获取将表序列化的方法。
额外参数的数量有上限,默认限制为8。此限制可以在OC模组的配置文件中修改,但是**不推荐**这样做。将限制调高可能会使性能较弱的电脑不可避免地经常崩溃,而将限制调低可能会使某些协议无法工作。
  • broadcast(port: number, ...): boolean
发送一条广播报文。此报文会被发送给所有可到达的网卡。若报文被成功发送则返回 true。请注意广播报文**不会**传递给发送这条报文的调制解调器自身。
所有额外参数都将作为数据一并发送,参见send。
  • getStrength(): number
获取当前发送报文时使用的信号强度。

仅限无线网卡。

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

仅限无线网卡。

  • getWakeMessage():string
获取当前设置的唤醒消息。当电脑处于关闭状态时,网卡的任意端口接收到了唤醒消息(某网络数据包第一个参数中的字符串),则电脑会启动。此功能可用于机器人、普通电脑、服务器、无人机以及平板电脑。[[Component/tunnel/zh|连接卡]]也提供了相同的功能。
  • setWakeMessage(message: string, [fuzzy: boolean]):string
将唤醒消息设定为给定的**字符串**。消息可以模糊匹配(由fuzzy参数决定,默认为false)。模糊匹配时会忽略网络数据包中的其他参数。

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

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

使用例:

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

目录

< 100% 15% 15% >
组件API 3D打印机 - 抽象总线 - 无线接入点 - 区块加载器 - 电脑 - 合成 - 数据卡 - 数据库 - 调试 - 无人机 - 驱动器 - EEPROM - 经验 - 文件系统 - 发电机 - 地质分析仪 - GPU - 全息投影仪 - 因特网 - 物品栏控制器 - 拴绳 - 微控制器 - 调制解调器 - 运动传感器 - 导航 - 网络拆分器 - 活塞 - 红石 - 运动红石机构 - 机器人 - 屏幕 - 告示牌 - 储罐控制器 - 牵引光束 - 转运器 - 隧道 - 世界传感器
::: 其它 访问组件 - 信号
::: 模组联动 应用能源