UDP 连接失败 - 自新 iOS 更新 14.5.1 以来出现错误 "No route to host"
UDP Connection failed - Error "No route to host" since the new iOS Update 14.5.1
我有一个应用程序,通常所有设备都显示在开始页面上,这些设备连接到特定的 Wifi(接入点)。由于新的 iOS 更新,没有显示任何设备,并且在日志中显示“没有到主机的路由”。如果找到与此问题类似的问题但没有找到答案。
(此代码来自之前的开发人员,我对 iOS/swift 编码还很陌生,所以很抱歉...)
尝试发送广播时出现错误...请参阅下面的代码。
open func sendBroadcast(_ data: Data) throws {
if responseSource == nil {
try createSocket()
}
guard let source = responseSource else { return }
let UDPSocket = Int32(source.handle)
let socketLength = socklen_t(address.sin_len)
try data.withUnsafeBytes { (broadcastMessage) in
let broadcastMessageLength = data.count
let sent = withUnsafeMutablePointer(to: &address) { pointer -> Int in
let memory = UnsafeRawPointer(pointer).bindMemory(to: sockaddr.self, capacity: 1)
return sendto(UDPSocket, broadcastMessage.baseAddress, broadcastMessageLength, 0, memory, socketLength)
}
guard sent > 0 else {
if let errorString = String(validatingUTF8: strerror(errno)) {
debugPrint("UDP connection failed to send data: \(errorString)")
}
closeConnection()
throw ConnectionError.sendingMessageFailed(code: errno)
}
if sent == broadcastMessageLength {
// Success
debugPrint("UDP connection sent \(broadcastMessageLength) bytes")
}
}
}
感谢任何帮助。
我发现您必须向 Apple 申请多播网络授权:
https://developer.apple.com/contact/request/networking-multicast
从 iOS 14.5 开始,您必须请求使用 UDP...
如果他们允许您使用它,只需按照此处说明的这些步骤操作即可:
https://developer.apple.com/forums/thread/663271
他们通常会在 1-2 天后回复。
我有一个应用程序,通常所有设备都显示在开始页面上,这些设备连接到特定的 Wifi(接入点)。由于新的 iOS 更新,没有显示任何设备,并且在日志中显示“没有到主机的路由”。如果找到与此问题类似的问题但没有找到答案。
(此代码来自之前的开发人员,我对 iOS/swift 编码还很陌生,所以很抱歉...)
尝试发送广播时出现错误...请参阅下面的代码。
open func sendBroadcast(_ data: Data) throws {
if responseSource == nil {
try createSocket()
}
guard let source = responseSource else { return }
let UDPSocket = Int32(source.handle)
let socketLength = socklen_t(address.sin_len)
try data.withUnsafeBytes { (broadcastMessage) in
let broadcastMessageLength = data.count
let sent = withUnsafeMutablePointer(to: &address) { pointer -> Int in
let memory = UnsafeRawPointer(pointer).bindMemory(to: sockaddr.self, capacity: 1)
return sendto(UDPSocket, broadcastMessage.baseAddress, broadcastMessageLength, 0, memory, socketLength)
}
guard sent > 0 else {
if let errorString = String(validatingUTF8: strerror(errno)) {
debugPrint("UDP connection failed to send data: \(errorString)")
}
closeConnection()
throw ConnectionError.sendingMessageFailed(code: errno)
}
if sent == broadcastMessageLength {
// Success
debugPrint("UDP connection sent \(broadcastMessageLength) bytes")
}
}
}
感谢任何帮助。
我发现您必须向 Apple 申请多播网络授权: https://developer.apple.com/contact/request/networking-multicast
从 iOS 14.5 开始,您必须请求使用 UDP...
如果他们允许您使用它,只需按照此处说明的这些步骤操作即可: https://developer.apple.com/forums/thread/663271
他们通常会在 1-2 天后回复。