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 :

iPhone Socket UDP


Sujet :

Objective-C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut iPhone Socket UDP
    Bonjour,

    J'aimerai échanger des paquets UDP entre l'iPhone et le Mac. Pour cela j'ai mis en place un réseau ad-hoc sur le Mac auquel l'iPhone se connecte.
    Mon iPhone est le client, le Mac le serveur. Pour le client j'utilise les CFSocket. Le client envoie une simple chaîne de caractère au serveur qui lui se charge de l'afficher à l'écran.
    Mon programme fonctionne avec le simulateur mais pas avec l'iPhone.
    Est-ce qu'il y a quelque chose de plus à faire du fait qu'il s'agisse d'une connexion WiFi ?

    Merci de vos réponses !

    Code Serveur :
    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
    void serveur(){
     
        int sock;
        char buf[100];
        int error;
     
        struct sockaddr_in addr;
     
        sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
     
        addr.sin_len         = sizeof(addr);
        addr.sin_family      = AF_INET;
        addr.sin_port        = htons(PORT);
        addr.sin_addr.s_addr = INADDR_ANY;
     
        bind(sock, (const struct sockaddr *) &addr, addr.sin_len);
     
        error = recvfrom(sock, buf, 100, 0, NULL, NULL);
     
        if(error < 0)
        {
            NSLog(@"Error recvfrom");
        }
     
        else
        {
            printf("%s", buf);
        }
    }
    Code client
    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
    void debutClient(){
        NSLog(@"Client\n");
     
        struct sockaddr_in addr;
        addr.sin_len         = sizeof(addr);
        addr.sin_family      = AF_INET;
        addr.sin_port        = htons(PORT);
        addr.sin_addr.s_addr = INADDR_ANY;
     
        CFSocketRef sock = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, NULL, NULL);
     
        NSData *destinationAddressData = [NSData dataWithBytes:&addr length:sizeof(addr)];
     
        NSString *message = @"hello !";
        NSData *message_data = [message dataUsingEncoding:NSUTF8StringEncoding];
     
        CFSocketError socket_error = CFSocketSendData(sock, (CFDataRef)destinationAddressData, (CFDataRef)message_data, 0);
     
        if(socket_error < 0)
        {
            NSLog(@"Error send data!");
        }
    }

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Je viens de tester la connexion ad-hoc avec un autre programme qui envoie en TCP et ça fonctionne.

    Je pense donc que le problème vient du code mais je ne vois pas où...

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 950
    Points : 4 373
    Points
    4 373
    Par défaut
    Citation Envoyé par MissTitou Voir le message
    Je viens de tester la connexion ad-hoc avec un autre programme qui envoie en TCP et ça fonctionne.

    Je pense donc que le problème vient du code mais je ne vois pas où...
    tout ce qui touche à CFSocket est intiment lié à CFRunLoop : comme on ne voit pas ce que vous faites au niveau de l'appelant, …
    regardez CFSocketCreateRunLoopSource et CFRunLoopAddSource : si vous ne les utilisez pas, il y a une chance que ce soit çà votre problème.

    vous pouvez aussi tester directement avec les fonctions BSD sur le socket natif (sendto, write, …) : si celles-ci fonctionnent (elles sont synchrones) c'est que le problème vient bien du fait que le CFSocket n'est pas lié à la CFRunLoop.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    En fait j'avais déjà essayé avec les fonctions BSD et j'avais oublié une structure sockaddr_in pour envoyer un message au serveur (ce qui peut être fort utile ! ...)

    Je te remercie de ta réponse, ça marche nickel ! Ca veut donc dire qu'il faut utiliser CFSocketCreateRunLoopSource et CFRunLoopAddSource avec les CFSocket comme tu le disais (mais j'ai pas tester).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb de socket udp
    Par phoenixia dans le forum MFC
    Réponses: 7
    Dernier message: 01/06/2006, 17h08
  2. [socket UDP] Codage BER : Format des Tag (TLG)
    Par Lolita59 dans le forum Réseau
    Réponses: 28
    Dernier message: 19/05/2006, 17h37
  3. Socket : UDP ou TCP
    Par lafracas dans le forum Développement
    Réponses: 2
    Dernier message: 10/04/2006, 22h43
  4. code c pour sockets (udp vers tcp et inversement)
    Par HiT dans le forum Développement
    Réponses: 11
    Dernier message: 19/11/2005, 18h03
  5. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 00h19

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