Ios 使用bonjour和nsnetservice的慢速数据包传输
我正在开发一款基于本地网络的游戏。我的意思是,你可以在本地网络wifi或蓝牙的不同iphone上播放。我使用带有tcp连接的NSStream实现了数据传输。我有一台服务器监听网络:Ios 使用bonjour和nsnetservice的慢速数据包传输,ios,tcp,bluetooth,Ios,Tcp,Bluetooth,我正在开发一款基于本地网络的游戏。我的意思是,你可以在本地网络wifi或蓝牙的不同iphone上播放。我使用带有tcp连接的NSStream实现了数据传输。我有一台服务器监听网络: service = [[NSNetService alloc] initWithDomain:@"local."// 4 type:CreateNSString(serviceType)
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];
如果调用了回调nsstreamventhassspaceavailable,我将发送排队的最后几条数据
case NSStreamEventHasSpaceAvailable: {
if (stream == _outputStream)
{
//read a new chunk of data
[self _sendData];
}
} break;
在对等点之间传输数据时,我已停止浏览设备。
转移做得很好。但我的问题是蓝牙传输速度非常快。但wifi的速度较慢。我不明白,这似乎不合逻辑。你对这个问题有什么线索吗?当对等方连接时,浏览将关闭。我可以进入同一问题。你找到解决办法了吗?不幸的是,我们找到了解决这个问题的办法。即使在apple代码示例Witap上也会出现数据包传输速度慢的问题,我做了这个代码示例的udp版本,但是数据包丢失的数量太大了。奇怪的是,蓝牙连接的数据传输速度很快,我也能解决同样的问题。你找到解决办法了吗?不幸的是,我们找到了解决这个问题的办法。即使在apple代码示例Witap上也会出现数据包传输速度慢的问题,我做了这个代码示例的udp版本,但是数据包丢失的数量太大了。奇怪的是,蓝牙连接的数据传输速度很快。