IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

NSStream, trouver le bon serveur et/ou la bonne IP


Sujet :

Objective-C

  1. #1
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut NSStream, trouver le bon serveur et/ou la bonne IP
    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 :

    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 je tente ma connexion :
    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]);
            }
        }
    }
    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.

    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
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Vous le dites vous-même c'est un processus asynchrone...

    Donc vous lancez vos requêtes en parallèle en utilisant comme delegate un objet de votre conception qui prendra comme paramètre de construction l'IP et le "vrai" delegate (celui que vous passez à NSStream setDelegate pour le moment).

    Votre application doit simplement "attendre" que l'IP du serveur soit découverte avant de donner accès à ce qui est dépend dans l'UI...

    (vous notifiez la découverte de l'IP via une NSNotification…)

  3. #3
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    Vous le dites vous-même c'est un processus asynchrone...

    Donc vous lancez vos requêtes en parallèle en utilisant comme delegate un objet de votre conception qui prendra comme paramètre de construction l'IP et le "vrai" delegate (celui que vous passez à NSStream setDelegate pour le moment).

    Votre application doit simplement "attendre" que l'IP du serveur soit découverte avant de donner accès à ce qui est dépend dans l'UI...

    (vous notifiez la découverte de l'IP via une NSNotification…)
    A priori, il semblerait que mon bonheur existe avec les class AsyncSocket et AsyncUdpSocket qui permettent de faire du broadcast.

    Elles ne sont pas dans le framework mais se trouvent sur le net.
    Et du coup, ça aide à trouver la bonne IP.

    Mais merci pour ce conseil (que j'avais essayé, mais qui ne fonctionnait pas comme je voulais)
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  4. #4
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Oui, un broadcast pour découvrir le serveur est une bien meilleure idée que de tout tester. Après il y a aussi des bibliothèques toutes faites pour ça, comme Bonjour, mais je ne sais pas si ça sera compatible avec ton application Java. Tu peux probablement en trouver plus ouvert.

Discussions similaires

  1. Tomcat est il un bon serveur d'aplication ?
    Par abd21 dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 27/09/2006, 16h23
  2. [CGI] Trouver des bons cours
    Par Artusamak dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2006, 18h51
  3. Choisir de lancer le bon serveur au démarrage linux
    Par temperature dans le forum Administration système
    Réponses: 5
    Dernier message: 20/05/2006, 16h49
  4. [eclipse raccourci] impossible de trouver le rac serveur
    Par chouchou93 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 03/03/2006, 09h10
  5. [SERVLET] trouver adresse du serveur
    Par Super Castor dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/10/2003, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo