说明
使用 chrome.sockets.udp API 通过 UDP 连接在网络上发送和接收数据。此 API 取代了之前在“socket”API 中提供的 UDP 功能。
清单
类型
CreateInfo
属性
-
socketId
数值
新创建的套接字的 ID。请注意,通过此 API 创建的套接字 ID 与通过其他 API(例如已废弃的
[socket](../socket/)API)创建的套接字 ID 不兼容。
DnsQueryType
DNS 解析偏好设置。默认值为 any,并使用当前操作系统配置,该配置可能会返回 IPv4 或 IPv6。ipv4 强制使用 IPv4,ipv6 强制使用 IPv6。
枚举
"any"
"ipv4"
"ipv6"
ReceiveErrorInfo
属性
-
resultCode
数值
底层 recvfrom() 调用返回的结果代码。
-
socketId
数值
插槽 ID。
ReceiveInfo
属性
-
数据
ArrayBuffer
UDP 数据包内容(截断为当前缓冲区大小)。
-
remoteAddress
字符串
数据包来源主机的地址。
-
remotePort
数值
数据包来源主机的端口。
-
socketId
数值
插槽 ID。
SendInfo
属性
-
bytesSent
number 可选
发送的字节数(如果结果 == 0)
-
resultCode
数值
底层网络调用返回的结果代码。负值表示存在错误。
SocketInfo
属性
-
bufferSize
number 可选
用于接收数据的缓冲区大小。如果未明确指定缓冲区大小,则不提供该值。
-
localAddress
字符串 可选
如果底层套接字已绑定,则包含其本地 IPv4/6 地址。
-
localPort
number 可选
如果底层套接字已绑定,则包含其本地端口。
-
name
字符串 可选
与套接字关联的应用定义的字符串。
-
已暂停
布尔值
此标记指示是否阻止套接字触发 onReceive 事件。
-
持久性
布尔值
此标志指示在应用暂停时套接字是否保持打开状态(请参阅
SocketProperties.persistent)。 -
socketId
数值
插槽标识符。
SocketProperties
属性
-
bufferSize
number 可选
用于接收数据的缓冲区大小。如果缓冲区太小,无法接收 UDP 数据包,数据就会丢失。默认值为 4096。
-
name
字符串 可选
与套接字关联的应用定义字符串。
-
持久性
布尔值 (可选)
此标志用于指示在应用的事件页面卸载时是否让套接字保持打开状态(请参阅管理应用生命周期)。默认值为“false”。加载应用后,可以使用
getSockets提取之前使用 persistent=true 打开的所有套接字。
方法
bind()
chrome.sockets.udp.bind(
socketId: number,
address: string,
port: number,
callback: function,
): void
绑定套接字的本地地址和端口。对于客户端套接字,建议使用端口 0,以便让平台选择空闲端口。
bind 操作成功完成后,当 UDP 数据包到达指定的地址/端口时,系统会引发 onReceive 事件,除非套接字已暂停。
参数
-
socketId
数值
插槽 ID。
-
地址
字符串
本地机器的地址。支持 DNS 名称、IPv4 和 IPv6 格式。使用“0.0.0.0”可接受来自所有本地可用网络接口的数据包。
-
端口
数值
本地机器的端口。使用“0”绑定到空闲端口。
-
callback
函数
callback参数如下所示:(result: number) => void
-
结果
数值
底层网络调用返回的结果代码。负值表示存在错误。
-
close()
chrome.sockets.udp.close(
socketId: number,
callback?: function,
): Promise<void>
关闭套接字并释放套接字绑定的地址/端口。每个创建的套接字都应在使用后关闭。调用该函数后,套接字 ID 将不再有效。不过,只有在调用回调时,套接字才一定会关闭。
参数
-
socketId
数值
插槽 ID。
-
callback
函数可选
callback参数如下所示:() => void
返回
-
承诺<void>
Chrome 121 及更高版本只有 Manifest V3 及更高版本支持 Promise,其他平台需要使用回调。
create()
chrome.sockets.udp.create(
properties?: SocketProperties,
callback?: function,
): Promise<CreateInfo>
创建具有给定属性的 UDP 套接字。
参数
-
属性
套接字属性(可选)。
-
callback
函数可选
callback参数如下所示:(createInfo: CreateInfo) => void
-
createInfo
套接字创建结果。
-
返回
-
Promise<CreateInfo>
Chrome 121 及更高版本只有 Manifest V3 及更高版本支持 Promise,其他平台需要使用回调。
getInfo()
chrome.sockets.udp.getInfo(
socketId: number,
callback?: function,
): Promise<SocketInfo>
检索给定套接字的状态。
参数
-
socketId
数值
插槽 ID。
-
callback
函数可选
callback参数如下所示:(socketInfo: SocketInfo) => void
-
socketInfo
包含套接字信息的对象。
-
返回
-
Promise<SocketInfo>
Chrome 121 及更高版本只有 Manifest V3 及更高版本支持 Promise,其他平台需要使用回调。
getJoinedGroups()
chrome.sockets.udp.getJoinedGroups(
socketId: number,
callback?: function,
): Promise<string[]>
获取套接字当前加入的多播组地址。
参数
-
socketId
数值
插槽 ID。
-
callback
函数可选
callback参数如下所示:(groups: string[]) => void
-
群组
字符串[]
套接字加入的组的数组。
-
返回
-
Promise<string[]>
Chrome 121 及更高版本只有 Manifest V3 及更高版本支持 Promise,其他平台需要使用回调。
getSockets()
chrome.sockets.udp.getSockets(
callback?: function,
): Promise<SocketInfo[]>
检索应用拥有的当前打开的套接字列表。
参数
-
callback
函数可选
callback参数如下所示:(socketInfos: SocketInfo[]) => void
-
socketInfos
包含插槽信息的对象数组。
-
返回
-
Promise<SocketInfo[]>
Chrome 121 及更高版本只有 Manifest V3 及更高版本支持 Promise,其他平台需要使用回调。
joinGroup()
chrome.sockets.udp.joinGroup(
socketId: number,
address: string,
callback: function,
): void
加入多播组并开始接收来自该组的数据包。在调用此方法之前,必须将套接字绑定到本地端口。
参数
-
socketId
数值
插槽 ID。
-
地址
字符串
要加入的群组地址。不支持域名。
-
callback
函数
callback参数如下所示:(result: number) => void
-
结果
数值
底层网络调用返回的结果代码。负值表示存在错误。
-
leaveGroup()
chrome.sockets.udp.leaveGroup(
socketId: number,
address: string,
callback: function,
): void
退出之前使用 joinGroup 加入的多播群组。只有在您计划之后继续使用套接字时,才需要调用此方法,因为当套接字关闭时,操作系统会自动执行此操作。
退出组后,路由器将停止向本地主机发送多播数据报,前提是主机上没有其他进程仍加入该组。
参数
-
socketId
数值
插槽 ID。
-
地址
字符串
要退出的群组地址。不支持域名。
-
callback
函数
callback参数如下所示:(result: number) => void
-
结果
数值
底层网络调用返回的结果代码。负值表示存在错误。
-
send()
chrome.sockets.udp.send(
socketId: number,
data: ArrayBuffer,
address: string,
port: number,
dnsQueryType?: DnsQueryType,
callback: function,
): void
通过给定套接字将数据发送到给定地址和端口。在调用此方法之前,必须将套接字绑定到本地端口。
参数
-
socketId
数值
插槽 ID。
-
数据
ArrayBuffer
要发送的数据。
-
地址
字符串
远程机器的地址。
-
端口
数值
远程机器的端口。
-
dnsQueryType
DnsQueryType 可选
Chrome 103 及更高版本地址解析偏好设置。
-
callback
函数
callback参数如下所示:(sendInfo: SendInfo) => void
-
sendInfo
send方法的结果。
-
setBroadcast()
chrome.sockets.udp.setBroadcast(
socketId: number,
enabled: boolean,
callback: function,
): void
在此套接字上启用或停用广播数据包。
参数
-
socketId
数值
插槽 ID。
-
已启用
布尔值
true表示启用广播数据包,false表示停用广播数据包。 -
callback
函数
callback参数如下所示:(result: number) => void
-
结果
数值
底层网络调用返回的结果代码。
-
setMulticastLoopbackMode()
chrome.sockets.udp.setMulticastLoopbackMode(
socketId: number,
enabled: boolean,
callback: function,
): void
设置是否将从主机发送到多播组的多播数据包环回到主机。
注意:setMulticastLoopbackMode 的行为在 Windows 和类 Unix 系统之间略有不同。只有在同一主机上有多个应用加入同一多播组,但多播环回模式设置不同时,才会出现不一致的情况。在 Windows 上,关闭环回的应用不会接收环回数据包;而在类 Unix 系统上,关闭环回的应用不会将环回数据包发送到同一主机上的其他应用。请参阅 MSDN:https://learn.microsoft.com/en-us/windows/win32/winsock/ip-multicast-2
调用此方法不需要多播权限。
参数
-
socketId
数值
插槽 ID。
-
已启用
布尔值
指示是否启用环回模式。
-
callback
函数
callback参数如下所示:(result: number) => void
-
结果
数值
底层网络调用返回的结果代码。负值表示存在错误。
-
setMulticastTimeToLive()
chrome.sockets.udp.setMulticastTimeToLive(
socketId: number,
ttl: number,
callback: function,
): void
设置发送到多播群组的多播数据包的存留时间。
调用此方法不需要多播权限。
参数
-
socketId
数值
插槽 ID。
-
ttl
数值
存留时间值。
-
callback
函数
callback参数如下所示:(result: number) => void
-
结果
数值
底层网络调用返回的结果代码。负值表示存在错误。
-
setPaused()
chrome.sockets.udp.setPaused(
socketId: number,
paused: boolean,
callback?: function,
): Promise<void>
暂停或取消暂停套接字。暂停的套接字无法触发 onReceive 事件。
参数
-
socketId
数值
插槽 ID。
-
已暂停
布尔值
用于指示是暂停还是取消暂停的标志。
-
callback
函数可选
callback参数如下所示:() => void
返回
-
承诺<void>
Chrome 121 及更高版本只有 Manifest V3 及更高版本支持 Promise,其他平台需要使用回调。
update()
chrome.sockets.udp.update(
socketId: number,
properties: SocketProperties,
callback?: function,
): Promise<void>
更新套接字属性。
参数
-
socketId
数值
插槽 ID。
-
要更新的属性。
-
callback
函数可选
callback参数如下所示:() => void
返回
-
承诺<void>
Chrome 121 及更高版本只有 Manifest V3 及更高版本支持 Promise,其他平台需要使用回调。
事件
onReceive
chrome.sockets.udp.onReceive.addListener(
callback: function,
)
当给定套接字收到 UDP 数据包时触发的事件。
参数
-
callback
函数
callback参数如下所示:(info: ReceiveInfo) => void
-
信息
-
onReceiveError
chrome.sockets.udp.onReceiveError.addListener(
callback: function,
)
当运行时在套接字地址和端口上等待数据时发生网络连接错误,便会触发此事件。此事件触发后,套接字会暂停,并且在套接字恢复之前,不会再为此套接字触发 onReceive 事件。
参数
-
callback
函数
callback参数如下所示:(info: ReceiveErrorInfo) => void