Bonjour,
Je tente de faire communiquer une application iOS avec une application java.
Pour ça, j'utilise les socket coté java, et NSStream coté iOS.
J'arrive à peu près à faire communiquer mon server java avec mes clients iOS, mais le hic, c'est que je connais l'IP de mon server, mais ceux qui utiliseront l'appli ne conaîtront pas forcément l'IP de leur server.
Du coup, j'essaie de boucler comme ceci :
et je tente ma connexion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 NSString *host = @"192.168.0.%i"; for (int indexHost = 0; indexHost <= 255; indexHost++) { NSLog(host, indexHost); [self connectToServerUsingStream:[NSString stringWithFormat:host, indexHost] portNo:6689]; }
Et donc, cette méthode n'échoue pour ainsi dire jamais, l'état des Streams ne me permet pas de déterminer si c'est le bon host.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 - (void)connectToServerUsingStream:(NSString *)urlStr portNo:(uint)portNo { if (![urlStr isEqualToString:@""]) { NSURL *website = [NSURL URLWithString:urlStr]; if (!website) { NSLog(@"%@ is not a valid URL", urlStr); return; } else { [NSStream getStreamsToHostNamed:urlStr port:portNo inputStream:&iStream outputStream:&oStream]; [iStream retain]; [oStream retain]; [iStream setDelegate:self]; [oStream setDelegate:self]; [iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [oStream open]; [iStream open]; NSLog(@"stream input for host %@ : %@ => %i, %@", urlStr, iStream, [iStream streamStatus], [iStream streamError]); } } }
Le seul moyen de savoir, c'est d'attendre le retour du handleEvent, mais vu que c'est asynchrone, quand j'ai un retour avec l'event NSStreamEventOpenCompleted, et bien ma boucle est terminée...et du coup, difficile de savoir quelle IP est finalement la bonne.
Est-ce que vous auriez une piste pour que je puisse finalement scanner des IPs pour trouver la bonne, sachant que ces IPs sont sur un réseau local, donc on reste dans un petit périmètre d'adresse IP.
Merci d'avance
Partager