В своем приложении я делаю что-то очень похожее на то, что делается в проекте WiTap .Я использую Bonjour для обнаружения пиров, а затем отправляю данные через сокет для выполнения первоначального рукопожатия.
Я могу видеть, что данные отправляются OTA с помощью Cocoa Packet Analyzer.Но функция stream: handleEvent:
никогда не вызывается на принимающей одноранговой стороне.
Я могу видеть следующее:
- Иногда, когда узел, отправивший данные, выходит,узел получателя, кажется, получает данные.
- Иногда я вижу ошибку
NSStreamEventErrorOccurred
в функции обработчика.
Мне не удается увидеть какой-либо заметный паттерн привышеописанное поведение происходит.
Вот фрагмент кода, который может быть полезен.
Объекты PacketSender и PacketReceiver являются одиночными.Я неоднократно проверял, что правильный (и единственный) экземпляр этих объектов задается в качестве делегатов при отладке:
if (![netService getInputStream:&_inStream outputStream:&_outStream])
{
[Utilities showAlert:@"Failed connecting to server"];
return BM_ERROR_NETSERVICE_STREAM_FAIL;
}
if(!sharedProtocolManager.mPacketSender)
{
sharedProtocolManager.mPacketSender = [PacketSender sharedSender];
}
if(!sharedProtocolManager.mPacketReceiver)
{
sharedProtocolManager.mPacketReceiver = [PacketReceiver sharedReceiver];
}
if(!sharedProtocolManager.mPacketSender || !sharedProtocolManager.mPacketReceiver)
{
return BM_ERROR_FAIL;
}
[PacketReceiver setupInStream:_inStream];
[PacketSender setupOutStream:_outStream];
}
Внутри пакета PacketReceiver setupInStream: у меня есть функция:
if (sharedPacketReceiver->mInStream != inStream)
{
[sharedPacketReceiver->mInStream release];
sharedPacketReceiver->mInStream = [inStream retain];
}
sharedPacketReceiver->mInStream.delegate = sharedPacketReceiver;
Любые ответы или даже предложения о способах отладки этого будут очень благодарны.
Спасибо!