我正在使用GCDAsyncSocket(ios设备)建立UDP连接。一切正常,我能够发送和接收消息,我的问题是我想快速交换数据。我可以将相当快的数据从我的iphone发送到电脑,但是我无法从电脑获得该速度数据,更具体的是我希望能够每100毫秒获得一次数据。 我连接成功时使用此功能:
-(void)startRead {
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(startRead) userInfo:nil repeats:YES];
[asyncSocket readDataWithTimeout:-1 tag:0];
}
有了这个,我可以以1秒的间隔读取数据但是如果我试着把0.1秒我的程序冻结。(相同的值在1秒以下)我确定我在这里做错了并且将有一种方法来实现我想要的所以,如果有人知道PLZ帮助!! 感谢名单
答案 0 :(得分:0)
我相信上面的评论是正确的,你没有在init上正确设置Delegate。套接字创建应该是这样的
GCDAsyncUdpSocket* udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![udpSocket bindToPort:0 error:&error])
{
[self logError:[NSString stringWithFormat:@"Error binding: %@", error]];
return;
}
if (![udpSocket beginReceiving:&error])
{
[self logError:[NSString stringWithFormat:@"Error receiving: %@", error]];
return;
}
NSString *_host = nil;
uint16_t _port = 0;
[GCDAsyncUdpSocket getHost:&_host port:&_port fromAddress:udpSocket.localAddress];
[self logInfo:[NSString stringWithFormat:@"Socket setup on host %@:%d", _host, _port]];
[self logInfo:@"Socket created successfully."];
除非你使用的是不同版本的GCDAsyncUdpSocket,否则正确的回调方法实际上就是下面的方法。设置委托并在正确的端口上接收数据包时会自动调用此方法。
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext