gpt4 book ai didi

objective-c - didConnectToHost 没有被调用

转载 作者:行者123 更新时间:2023-12-03 16:47:04 25 4
gpt4 key购买 nike

我使用 GCDAsyncSocket 并导入 CGDAsyncSocket.h 创建了一个名为“NetClass”的类的客户端。比在我的 LoginViewController 中,我调用了我的网络类函数来连接到服务器。

在服务器端,我看到客户端已连接,但在客户端 didConnectToHost 没有被调用。

我在 LoginViewController 中调用 NetClass:

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 中使用此方法?

最佳答案

众所周知,GCDAsyncSocket 不会调用 didConnectToHost: 方法。我建议改用 AsyncSocket 或自己调用委托(delegate)方法。

关于objective-c - didConnectToHost 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12120970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com