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