首页 文章

iPhone应用程序连接到脱机网络中的服务器

提问于
浏览
6

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

我相信如果没有互联网连接,设备将使用其蜂窝网络进行互联网访问 . 从一个观察结果来看,在连接到热点后,一些在线通知仍被推送到手机(我百分之百确定网络中没有互联网访问),但几分钟后,就不再有互联网接入了手机能够连接到服务器 .

所以问题是我如何才能实现iPhone服务器的即时连接?是否有任何欺骗连接的客户端设备认为有互联网访问?

1 回答

  • 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
    }
    

相关问题