0 votes

Délai d'attente du réseau lors de la tentative de connexion de l'iPod touch à mon serveur

J'ai un programme iPod touch qui devrait recevoir des messages d'un programme serveur sur mon mac. Pour m'assurer que le touch peut recevoir des messages d'un ordinateur autre qu'un mac, j'ai programmé le serveur en C++. Si j'exécute à la fois le serveur et l'application iPod sur le même ordinateur (l'application fonctionnant sur le simulateur), la connexion fonctionne et tout va bien. Cependant, lorsque j'essaie de me connecter au serveur depuis mon appareil, la connexion expire. Quelqu'un peut-il repérer le problème ? Je ne suis pas très bon en réseau et en général avec l'iPhone OS.

server.cpp:

sockfd = socket(PF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
    cout << "ERROR opening socket";
    return;
}

memset((char *)&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
    cout << "ERROR on binding";
    return;
}

listen(sockfd,5);
clilen = sizeof(cli_addr);

newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, (socklen_t*)&clilen);
if (newsockfd < 0) {
    cout << "ERROR on accept.";
    return;
}

Le serveur reste bloqué à l'accept(), en attente de l'application...

client.m:

CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)hostName, portNum, &readStream, &writeStream);

if (readStream && writeStream) {
    NSLog(@"Starting streams");

    CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
    CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);

    inputStream = (NSInputStream *)readStream;
    [inputStream retain];
    [inputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];

    outputStream = (NSOutputStream *)writeStream;
    [outputStream retain];
    [outputStream setDelegate:self];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream open];
}
if (readStream)
    CFRelease(readStream);

if (writeStream)
    CFRelease(writeStream);

Aussi loin que je puisse le dire, ni le serveur ni le client ne signalent d'erreurs (je vérifie à travers errno et NSError) autre que le délai d'expiration.

Si quelqu'un peut m'aider avec cela, merci beaucoup !

0voto

confusedKid Points 1385

L'iPod était connecté à un réseau différent de celui de mon Mac, c'est pourquoi il a été bloqué. Lorsque je me suis connecté au même réseau, tout fonctionnait parfaitement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X