Connexion de l’application iPhone au serveur sur le réseau hors ligne

Je développe un système qui possède un serveur Java simple dans un réseau privé sans connexion Internet, un routeur Wifi qui permet aux appareils mobiles de se connecter au réseau et au serveur, une application iOS qui se connecte au serveur via TCP. J’ai constaté que lorsqu’un périphérique non cellulaire (par exemple: iPod touch) est connecté au réseau via le routeur Wifi, il ne rencontre aucun problème de connexion au serveur. Cependant, lorsque vous connectez un iPhone au point d’access Wifi, l’application cliente sur le périphérique prend plus de 5 minutes pour localiser le serveur.

Je crois que s’il n’y a pas de connexion Internet, l’appareil utilisera son réseau cellulaire pour accéder à Internet. D’après une observation, une fois connecté au hotspot, certaines notifications en ligne étaient encore envoyées au téléphone (je suis sûr à 100% qu’il n’y avait pas d’access à Internet sur le réseau), mais après quelques minutes, il n’y avait plus d’access à Internet. le téléphone a pu se connecter au serveur.

Donc, la question est de savoir comment atteindre la connectivité instantanée au serveur pour iPhone? Y a-t-il quelque chose qui empêche les clients connectés de penser qu’il ya un access à Internet?

Existe-t-il un équilibreur de charge pour le serveur?

L’autre option est que vous pouvez vérifier la connexion réseau ou wifi, si le wifi est désactivé, puis affichez une invite.

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 }