【问题标题】:iPhone application connection to server in offline networkiPhone 应用程序连接到离线网络中的服务器
【发布时间】:2015-11-19 22:44:11
【问题描述】:

我正在开发一个系统,它在没有 Internet 连接的专用网络中具有一个简单的 Java 服务器,一个允许移动设备连接到网络和服务器的 Wifi 路由器,一个使用 TCP 连接到服务器的 iOS 应用程序。我发现当非蜂窝设备(例如:iPod touch)通过 Wifi 路由器连接到网络时,连接到服务器没有问题。但是,将 iPhone 连接到 Wifi 热点时,设备上的客户端应用程序需要 5 分钟以上才能找到服务器。

我相信,如果没有互联网连接,该设备将使用其蜂窝网络访问互联网。从一个观察来看,在连接到热点之后,一些在线通知仍然被推送到手机上(我 100% 确定网络中没有互联网访问),但几分钟后,不再访问互联网并且手机可以连接到服务器。

所以问题是如何实现与 iPhone 的服务器的即时连接?有什么东西可以诱使连接的客户端设备认为可以访问互联网吗?

【问题讨论】:

    标签: ios networking server private


    【解决方案1】:

    服务器有负载均衡器吗?

    其他选项是您可以检查网络或wifi连接,如果wifi关闭则显示提示。

     func isConnectedToNetwork() -> Bool {
    
        var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
        zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)
    
        let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
            SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
        }
    
        var flags: SCNetworkReachabilityFlags = 0
        if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {
            return false
        }
    
        let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
        let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
    
        return (isReachable && !needsConnection) ? true : false
    }
    

    【讨论】:

    • 服务器上没有负载均衡器,它是一个非常简单的Java服务器。如问题中所述,只有 iPhone 无法连接到服务器。 Wifi 网络不提供 Internet 连接,因此我怀疑该设备使用其蜂窝连接来访问 Internet。但是,有时会稍后建立连接。
    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多