如何使用苹果的网络框架向所有链接本地节点发送 UDP 消息?

Posted

技术标签:

【中文标题】如何使用苹果的网络框架向所有链接本地节点发送 UDP 消息?【英文标题】:How can I send a UDP message to all link local nodes using apple's Network framework? 【发布时间】:2019-07-15 11:32:32 【问题描述】:

当我尝试建立连接时,它从等待(POSIXErrorCode: Network is down)变为preparing state。但它永远不会进入ready state,我不知道如何发送数据报。

import Network
import Dispatch

let connection = NWConnection(host: .ipv6(.linkLocalNodes), port: 9898, using: .udp)

connection.stateUpdateHandler =  state in print(state) 
connection.start(queue: DispatchQueue(label: "UDP"))

如何向所有链路本地节点发送 UDP 消息?

【问题讨论】:

UDP 是专门无连接的。 @RonMaupin :好的,但是我该如何发送消息呢?当我立即发送时使用:connection.send(content: "Hello world, this is me".data(using: .utf8), completion: .idempotent) 永远不会发送数据报。 @RonMaupin 从未发送过或从未发送过? 从未发送过。但无论如何,您如何建议在没有 NWConnection 的情况下发送数据报? 【参考方案1】:

看起来您需要为链路本地多播地址指定一个接口。发送到所有接口不起作用。因此,例如在我的情况下,我必须发送到 .ipv6(IPv6Address("ff02::1%en4")!) 以发送到 en4 上的所有本地节点。

【讨论】:

以上是关于如何使用苹果的网络框架向所有链接本地节点发送 UDP 消息?的主要内容,如果未能解决你的问题,请参考以下文章

使用 boost asio udp 套接字时如何设置本地端点

当应用程序在后台时,如何从 ios 5 应用程序向本地网络中的服务器发送一些请求?

一次通话向所有订阅者发送网络推送通知

研究人员发现 利用漏洞可通过苹果「查找」网络发送消息

在节点 js 中推送通知

通过网络发送信息