我正在开发基于本地网络的游戏。我的意思是你可以在本地网络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速度较慢。我不明白这一点,它似乎不合逻辑。你有关于这个问题的任何线索吗?当对等体连接时,浏览将被关闭。