在我的应用程序中,我做的事情与WiTap项目中所做的事情非常相似。我使用 Bonjour 来发现对等点,然后通过套接字发送数据以执行初始握手。
我可以看到使用 Cocoa Packet Analyzer OTA 发送的数据。但是该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;
任何有关进一步调试方法的答案甚至建议都将不胜感激。
谢谢!