2015-08-26 16 views
6

Sto sviluppando un sistema che ha un semplice server Java in una rete privata senza connessione Internet, un router Wifi che consente ai dispositivi mobili di connettersi alla rete e al server, un'applicazione iOS che si connette a il server che utilizza TCP. Ho scoperto che quando un dispositivo non cellulare (ad es. IPod touch) è connesso alla rete tramite il router Wifi, non ha alcun problema nel collegarsi al server. Tuttavia, quando si collega un iPhone all'hotspot Wi-Fi, l'applicazione client sul dispositivo impiega più di 5 minuti per individuare il server.Connessione applicazione iPhone al server nella rete offline

Credo che se non esiste una connessione Internet, il dispositivo utilizzerà la sua rete cellulare per l'accesso a Internet. Da un'osservazione, dopo essere stata collegata all'hotspot, alcune notifiche online sono state ancora inviate al telefono (sono sicuro al 100% per cento che non c'era accesso a Internet nella rete), ma dopo pochi minuti non c'era più accesso a Internet e il telefono è stato in grado di connettersi al server.

Quindi la domanda è: come posso ottenere la connettività istantanea al server per iPhone? C'è qualcosa che induce i dispositivi client connessi a pensare che ci sia l'accesso a Internet?

risposta

1

Esiste un servizio di bilanciamento del carico per il server?

Un'altra opzione è che è possibile controllare la rete o la connessione wifi, se la rete wifi è spenta, quindi mostrare un prompt.

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 
} 
+0

Non esiste un servizio di bilanciamento del carico sul server, è un server Java molto semplice. Come affermato nella domanda, solo gli iPhone hanno problemi di connessione al server. La rete Wifi non fornisce la connettività Internet, quindi ho il sospetto che il dispositivo utilizzi la sua connessione cellulare per accedere a Internet. Tuttavia, la connessione viene stabilita qualche volta più tardi. – user945711

Problemi correlati