2011-12-03 10 views
6

Sto cercando di inviare e ricevere semplicemente un messaggio utilizzando GCDAsyncSocket e non riesco a farlo funzionare.GCDAsynSocketDelegate Il metodo didReadData non viene chiamato. Utilizzo di GCDAsynSocket

Sto stabilendo con successo la connessione e scrivendo messaggi, ma quando si tratta di leggere il mio delegato non viene mai chiamato.

Sono im utilizzando iOS5 e questa configurazione:

Cliente:

-(void) connectToHost:(HostAddress*)host{ 

    NSLog(@"Trying to connect to host %@", host.hostname); 

    if (asyncSocket == nil) 
    { 
     asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 

     NSError *err = nil; 
     if ([asyncSocket connectToHost:host.hostname onPort:host.port error:&err]) 
     { 
      NSLog(@"Connected to %@", host.hostname); 

      NSString *welcomMessage = @"Hello from the client\r\n"; 
      [asyncSocket writeData:[welcomMessage dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:1]; 

      [asyncSocket readDataWithTimeout:-1 tag:0]; 
     }else 
      NSLog(@"%@", err); 
    } 

} 

delegato didReadData metodo non viene chiamato

-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ 

    NSLog(@"MESSAGE: %@", [NSString stringWithUTF8String:[data bytes]]); 

} 

Server

-(void)viewDidLoad{ 

    asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 

    connectedSockets = [[NSMutableArray alloc] init]; 

    NSError *err = nil; 
    if ([asyncSocket acceptOnPort:0 error:&err]){ 

     UInt16 port = [asyncSocket localPort]; 

     //...bojour stuff 
    } 
    else{ 
     NSLog(@"Error in acceptOnPort:error: -> %@", err); 
    } 

} 

Scrivi un messaggio a c UIDA DI RIFERIMENTO e attendere la risposta sulla connessione socket successo

- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket 
{ 
    NSLog(@"Accepted new socket from %@:%hu", [newSocket connectedHost], [newSocket connectedPort]); 

    // The newSocket automatically inherits its delegate & delegateQueue from its parent. 

    [connectedSockets addObject:newSocket]; 

    NSString *welcomMessage = @"Hello from the server\r\n"; 
    [asyncSocket writeData:[welcomMessage dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:1]; 

    [asyncSocket readDataWithTimeout:-1 tag:0]; 

} 

E questo non si chiama mai ...

-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ 
    NSLog(@"New message from client... "); 
} 

risposta

3

Ok, trovato la risposta.

Il problema era che stavo scrivendo e leggendo sul mio socket invece del socket collegato.

Fix: (cambio asyncSocket al newSocket)

- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket 
{ 
    NSLog(@"Accepted new socket from %@:%hu", [newSocket connectedHost], [newSocket connectedPort]); 

    // The newSocket automatically inherits its delegate & delegateQueue from its parent. 

    [connectedSockets addObject:newSocket]; 

    NSString *welcomMessage = @"Hello from the server\r\n"; 
    [newSocket writeData:[welcomMessage dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:1]; 

    [newSocket readDataWithTimeout:-1 tag:0]; 

} 
Problemi correlati