ios - 无法使用 CocoaAsyncSocket 连接到 IPv6

标签 ios swift sockets ipv6

使用 CocoaAsyncSocket library 连接到 iPv6 主机时出现问题

我成功地让 GCDUDPAsyncSocket 工作,但意识到 TCP 更适合我的用例。

不幸的是 - 我永远无法成功连接到已发布和发现的 NSNetService。服务被发现,地址也被发现。发生了没有失败的连接尝试,但连接永远不会安全。

我可以使用“connectWithHost”连接并传入分配给我的 mac 的 IP 地址,但这是我获得该 ip 的唯一方法是通过硬编码。有没有办法通过NSNetService获取这个IP?

我使用的是 swift、Xcode 7.1.1 和 iOS 9.1。我在 iPhone 和运行 Apple TV 模拟器的 Mac 之间进行连接。这适用于 UDP。

无论如何 - 即使提供了适当的地址,连接尝试也会超时!

Socket is Disconnecting - Error Domain=NSPOSIXErrorDomain Code=60 "Operation timed out" UserInfo={NSLocalizedDescription=Operation timed out, NSLocalizedFailureReason=Error in connect() function}

有人遇到过这个吗?这是我的连接代码:

func connectToAddress(sender: NSNetService) {
if let addresses = sender.addresses {
    for address in addresses {
        print(address)
    }

    self.serverAddresses = addresses
    var done = false

    while !done && (self.serverAddresses.count > 0) {
        let address = self.serverAddresses[0]
        self.socket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
        do {
            try self.socket.connectToAddress(address)
            done = true
        } catch {
            print("Unable to Connect")
        }
    }

    if !done {
        print("Could Not Connect To Address")
    }
}

最佳答案

请更新您的 CocoaAsyncSocket 库。该问题已在 5 月 2 日提交时修复。所以这应该与以下设置为 false 的标志一起使用

socket.IPv4PreferredOverIPv6 = NO;

这将允许您的应用/游戏在 IPv4 和 IPv6 中连接。从 6 月 1 日起,Apple 将拒绝不兼容 IPv6 网络的应用程序。您的应用程序应该可以在 IPv6 网络中正常运行。

关于ios - 无法使用 CocoaAsyncSocket 连接到 IPv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34055469/

相关文章:

ios - 10.5"iPad Pro 上的 CADisplayLink 帧率

iOS 应用程序在真实设备上崩溃。错误 : dyld`__abort_with_payload

无需打开应用程序的 iOS 通知操作

Java Socket知道何时向gmail发出请求

ios - iPad Pro 第三代无缘无故杀死前台应用程序

ios - Core Graphics 上下文,它们是什么?

ios - 获取连接的 wifi 路由器的制造商名称

ios - Swift - 如何遍历 NSDictionary

python - 在同一个套接字上监听时多个进程之间的巨大 CPU 时间差异

c++ - 通过套接字发送数组