ios以UDP的速度快速读取数据

时间:2013-04-05 16:14:41

标签: ios udp asyncsocket

我正在使用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帮助!! 感谢名单

1 个答案:

答案 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