使用bonjour和nsnetservice进行慢速数据包传输

时间:2015-12-08 11:45:13

标签: ios tcp bluetooth

我正在开发基于本地网络的游戏。我的意思是你可以在本地网络wifi或蓝牙上的不同iphone上播放它。我使用NSStream实现了tcp连接以传输数据。我有一台服务器监听网络:

 service = [[NSNetService alloc] initWithDomain:@"local."// 4
                                              type:CreateNSString(serviceType)
                                              name:CreateNSString(serviceName)
                                              port:80];
        if(service)
        {
            service.includesPeerToPeer = YES;

            [service setDelegate:delegatePublisherObject];// 5
            [service publishWithOptions:NSNetServiceListenForConnections];

寻找游戏会话的客户:

serviceBrowser = [[NSNetServiceBrowser alloc] init];
        serviceBrowser.includesPeerToPeer = YES;
        [serviceBrowser setDelegate:delegateBrowserObject];

        [serviceBrowser searchForServicesOfType: CreateNSString(service) inDomain:@"local"];

但我对它们之间的数据传输存在问题。我从现在开始做的是:

我排队了我要发送的数据。如果我可以直接在输出流中写它

dataWriteQueue insertObject:data atIndex:0];
if (flag_canSendDirectly)
    [self _sendData];

...

 - (void)_sendData {
 NSData *data = [dataWriteQueue lastObject];
flag_canSendDirectly = NO;
if (data == nil)
{
    flag_canSendDirectly = YES;
    return;
}
bufferToSend = (uint8_t *)[data bytes];
NSInteger bytesWritten;

bytesWritten = [_outputStream write:bufferToSend maxLength:dataBufferLimit - currentDataOffset];

如果调用了回调NSStreamEventHasSpaceAvailable,我将发送最后排队的数据。

case NSStreamEventHasSpaceAvailable: {
        if (stream == _outputStream)
        {
            //read a new chunk of data
            [self _sendData];

        }

    } break;

当我在对等体之间传输数据时,我已停止浏览设备。 转移做得很好。但我的问题是蓝牙传输速度非常快。但是wifi速度较慢。我不明白这一点,它似乎不合逻辑。你有关于这个问题的任何线索吗?当对等体连接时,浏览将被关闭。

0 个答案:

没有答案