2012-08-25 64 views
2

我用GCDAsyncSocket和導入CGDAsyncSocket.h做了一個名爲「NetClass」的類的客戶端。 比我的LoginViewController我已經打電話給我的淨類功能連接到服務器。didConnectToHost沒有被調用

在服務器端,我看到客戶端已連接,但在客戶端didConnectToHost未被調用。

NetClass呼叫LoginViewController

NetClass *nc = [[NetClass alloc] init]; 
    [nc ReceiveData:ip login:login password:md5 ]; 

而且我NetClass功能:

- (BOOL)ReceiveData:(NSString *)ip login:(NSString*)login password:(NSString*)password 
{ 
    dispatch_queue_t mainQueue = dispatch_get_main_queue(); 
    asyncSocket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:mainQueue]; 

    NSError *error = nil; 
    uint16_t port = 2012; 
    if (![asyncSocket connectToHost:ip onPort:port error:&error]) 
    { 
     NSLog(@"Error connecting: %@", error); 
     return NO; 
    } 
    else 
    { 
     NSLog(@"%@",asyncSocket.connectedHost); 
     NSData *data = [[NSString stringWithFormat:@"<MOBIL><refreshall>TRUE</refreshall><user>%@</user><password>%@</password>",@"tst",@"tsts"] dataUsingEncoding:NSASCIIStringEncoding]; 
     NSData *enddata = [[NSString stringWithFormat:@"</ddodata"] dataUsingEncoding:NSASCIIStringEncoding]; 
     [asyncSocket writeData:data withTimeout:-1 tag:1]; 
     [asyncSocket readDataToData:enddata withTimeout:-1 maxLength:-1 tag:1]; 
     [asyncSocket disconnect]; 
     return YES; 
    } 


} 
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port 
{ 
    NSLog(@"%@ %@",@"CONNECTED TO HOST",host); 
} 

- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err 
{ 
    NSLog(@"socketDidDiscoffffnnect:%p withError: %@", sock, err); 
} 

但在同一時間功能socketDidDisconnect獲取調用

的NSLog輸出:

2012-08-25 14:16:46.312 TacticalView[34981:f803] (null) 
2012-08-25 14:16:46.313 TacticalView[34981:f803] socketDidDiscoffffnnect:0x88024d0 withError: (null) 

我看到asyncSocket未連接時變化receiveData的是這樣的:

if (![asyncSocket connectToHost:ip onPort:port error:&error]) 
    { 
     NSLog(@"Error connecting: %@", error); 
     return NO; 
    } 
    else 
    { 
     if ([asyncSocket isConnected]) 
     { 

     NSData *data = [[NSString stringWithFormat:@"<MOBIL><refreshall>TRUE</refreshall><user>%@</user><password>%@</password>",@"tst",@"tsts"] dataUsingEncoding:NSASCIIStringEncoding]; 

     NSData *enddata = [[NSString stringWithFormat:@"</ddodata"] dataUsingEncoding:NSASCIIStringEncoding]; 

     [asyncSocket writeData:data withTimeout:-1 tag:1]; 
     [asyncSocket readDataToData:enddata withTimeout:-1 maxLength:-1 tag:1]; 
     [asyncSocket disconnect]; 
     } 
     return YES; 
    } 

而且,如果我做窩在我的LoginViewController的didConnectToHost方法是完全調用/什麼是錯&爲什麼我不能用這個方法我NetClass?

+0

同樣的問題在這裏 - http://stackoverflow.com/questions/10347066/gcdasyncsocket-no-connection-ios5?s=3d272901-fc83-4870-a97a-c1fc7e78147d但有沒有ID沒有答案 – user1624340

回答

0

這是一個已知的事實,GCDAsyncSocket不會調用didConnectToHost:方法。我建議使用AsyncSocket,或者自己調用委託方法。

+0

你是什麼意思談論你自己調用委託方法?順便說一句GCDAsyncSocket不調用DidReadData方法..我怎麼可以從服務器接收一些數據 – user1624340

+0

如果我在我的LoginViewController中的套接字didConnectToHost方法完全調用 /什麼錯誤&爲什麼我不能在我的NetClass中使用此方法? – user1624340

相關問題