因此,我使用Apple的PictureSharing/PictureSharingBrowser示例来发送和接收数据。它通过NSFileHandle的writeData方法在服务器端使用NSFileHandle发送图片。
NSFileHandle * incomingConnection = [[aNotification userInfo] objectForKey:NSFileHandleNotificationFileHandleItem];
[[aNotification object] acceptConnectionInBackgroundAndNotify];
[incomingConnection writeData:dataToWrite];
[incomingConnection closeFile];这似乎可以很好地工作,直到我想发送大量数据(在本例中是1MB的数据)。当我尝试这样做时,应用程序在执行writeData方法时挂起。客户端甚至没有开始读取数据,它只是打开连接,但什么也没有发生。(它应该一块一块地读取数据块,而服务器一次发送所有数据)。
我猜在某个地方发生了一些死锁,但我不确定在哪里。我试着找一个异步者。用NSFileHandle编写数据块的方法,但是我找不到这样的方法。
任何指导都会有帮助!
发布于 2010-07-02 01:19:20
我基本上漏掉了一步...在NSNetServiceBrowser的netServiceBrowser: didFindService:( moreComing: delegate方法中,我不是简单地尝试连接到每个传入的服务,而是保留服务,为找到的服务设置委托,并尝试解析该服务。
然后,我可以打开一个流到*- (void)netServiceDidResolveAddress:(NSNetService )发送器中解析的服务,这是NSNetservice的委托方法。
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
[aNetService retain];
[aNetService setDelegate:self];
[aNetService resolveWithTimeout:5.0];
}
- (void)netServiceDidResolveAddress:(NSNetService *)service{
NSInputStream * istream;
[sender getInputStream:&istream outputStream:nil];
[istream retain];
[istream setDelegate:self];
[istream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[istream open];
[service release];
}
//... NSStreamDelegate method to retrieve the data via the stream.https://stackoverflow.com/questions/3129341
复制相似问题