0

我在使用 gcdasyncsocket 连续接收 udp 包时遇到问题。这就像 iP5 iOS6 和 iP4 iOS6 接收包 200-300 毫秒然后停止另一个 200-300 并重新开始接收。我用 iPhone 5 iOS7、iPhone 4 iOS 6 和 iPhone 5 iOS6 运行了一些测试。结果确认该问题仅出现在 iOS 6 中。

测试

代码并不复杂,它可以很简单,发送到广播地址“230.0.0.1”,接收器套接字加入组“230.0.0.1”。

发件人

_udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[_udpSocket bindToPort:_port error:&error];
[_udpSocket enableBroadcast:YES error:&error];
-(void)processBuffer: (NSData*)data
{
    [_udpSocket sendData:data toHost:@"230.0.0.1" port:_port withTimeout:-1 tag:tag];
    tag++;
}

接收者

_udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
if (![_udpSocket bindToPort:_port error:&error])
{
    NSLog(@"Binding to port %i: %@",_port,error);
}

if (![_udpSocket joinMulticastGroup:_address error:&error])
{
    NSLog(@"Joining to multicast groupu: %@",error);
}
if (![_udpSocket beginReceiving:&error])
    {
        [_udpSocket close];

        NSLog(@"Error starting server (recv): %@", error);

    }
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
      fromAddress:(NSData *)address
withFilterContext:(id)filterContext
{
    NSLog(@"IGotData");
}

我怎样才能连续收到?你遇到过类似的问题吗?

更新

我在 iP5 iOS7 -> 6.1 模拟器和 iOS 6.1 模拟器 -> iP5 iOS7 上运行了一些测试。在这两种情况下,我都有连续接收。

更新 v2

我再次运行测试,但现在使用模拟器 6.0 并且我再次连续接收。

4

1 回答 1

0

GCDAsyncUdpSocket 异步工作.. 你需要使用同步 UDP 请求来达到你想要的结果..

于 2013-12-05T10:10:21.153 回答