2010-02-03 6 views
0

Essentiellement, j'envoie des données à un Java Socket Server à partir d'une application iPhone mais quelque chose d'assez étrange se produit, il ne reçoit pas les données tant que l'application iPhone n'est pas fermée! Je suis sûr qu'il y a quelque chose qui me manque mais je n'arrive pas à le trouver, c'est tout à fait étrange.Très étrange iPhone - Problème serveur

Voici comment ma connexion est créé:

-(CFSocketRef)initSocket { 
    CFSocketContext context = { 
     .version = 0, 
     .info = self, 
     .retain = NULL, 
     .release = NULL, 
     .copyDescription = NULL 
    }; 

    sockety = CFSocketCreate(
     kCFAllocatorDefault, 
     PF_INET, 
     SOCK_STREAM, 
     IPPROTO_TCP, 
     kCFSocketDataCallBack^kCFSocketConnectCallBack, 
     socketCallBack, 
     &context 
     ); 
    uint16_t port = 4444; 

    struct sockaddr_in addr4; 

    memset(&addr4, 0, sizeof(addr4)); 
    addr4.sin_family = AF_INET; 
    addr4.sin_len = sizeof(addr4); 
    addr4.sin_port = htons(port); 

    const char *ipaddress = "192.168.1.5"; 

    inet_aton(ipaddress, &addr4.sin_addr); 

    NSData *address = [NSData dataWithBytes:&addr4 length:sizeof(addr4)]; 

    CFSocketError error = CFSocketConnectToAddress(sockety, (CFDataRef)address, 1); 

    if(error != kCFSocketSuccess) 
    { 
     Faliure = YES; 
    } 
    else{ 
     ViewNo = 2; 
    } 
    CFRunLoopSourceRef source; 

    source = CFSocketCreateRunLoopSource(NULL, sockety, 1); 
    CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode); 
    CFRelease(source); 
    return sockety; 
} 

Voici comment le message est envoyé:

const char *sendStrUTF = [sentmessage UTF8String]; 
NSData *dataOut = [NSData dataWithBytes: sendStrUTF length: strlen(sendStrUTF)]; 
CFSocketSendData(sockety, NULL, (CFDataRef) dataOut, 0); 

Toute aide serait grandement appréciée!

Merci à l'avance,
Ozzie

Répondre

0

Est votre appel à CFSocketSendData se fait sur un thread GUI (bloqué)?

J'expérimenterais en enveloppant ces 3 lignes dans un execSelectorInBackground/ou après des combinaisons de retard.

0
NSData *dat=[stringToSend dataUsingEncoding:NSASCIIStringEncoding]; 
CFSocketError w =CFSocketSendData(_socket, NULL,(CFDataRef)dat, 0); 
if (w==kCFSocketSuccess) { 
    NSLog(@"success"); 
} 
Questions connexes