CocaAsyncSocket丢失UDP数据包,可能是iOS 7 / iPad问题?

时间:2013-10-17 23:38:42

标签: networking udp ios7 cocoaasyncsocket

我目前正在使用XCode 5.0并使用{7}}库的iOS 7示例应用程序。在此应用程序中,“发送方控制器”在255.255.255.255port 4000发送UDP消息,以便“接收器控制器”处理和打印输出。 “发送者控制器”具有用于循环消息200次的for循环。使用Wireshark(过滤udp.port == 4000),在200个数据包中,其中0个丢失,这太棒了!在这种环境中,一切都很好,“接收器控制器”打印出所有消息。

但是现在当我将应用程序移动到一个真正的iPad(iPad MD328LL / A 16GB,Wi-Fi第三代iOS 7)时,一些数据包丢失了。在200个中,大约60%-65%的数据包被WireShark接收并进入“接收器控制器”。我不太确定它的库(我不认为,因为它与模拟器完美配合)或iOS 7 / iPad导致丢包问题。

代码:

// Sender Controller

@interface ViewController ()
{
    GCDAsyncUdpSocket *udpSocket;
}
@end


- (void)viewDidLoad
{
    [super viewDidLoad];

    if (udpSocket == nil)
    {
        [self setupSocket];
    }
    // ...
}

// set ups socket
- (void)setupSocket
{   
    // Initialize
    udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

    // Enable Broadcast
    [udpSocket enableBroadcast:YES error:nil];

    NSError *error = nil;

    // Bind to port
    if (![udpSocket bindToPort:0 error:&error])
    {
        [self logError:FORMAT(@"Error binding: %@", error)];
        return;
    }
    if (![udpSocket beginReceiving:&error])
    {
        [self logError:FORMAT(@"Error receiving: %@", error)];
        return;
    }

    [self logInfo:@"Ready"];
}

// ...


// Click event
- (IBAction)send:(id)sender
{
    // Format message
    NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];

    // Broadcast message 200 times
    for (int i = 0 ; i < 200; i++) {
        [udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:0];
    }
}

我知道在这种情况下,这些消息的发送速度很快,用户发送200个这样的广播的可能性很小。我也明白UDP是便宜的,偶尔会出现畸形或丢失的数据包,但速度为40%......这对我来说似乎相当高。

如果有人对此信息或任何有用信息有任何建议/经验,我们将不胜感激

提前致谢!

0 个答案:

没有答案