使用NSFileHandle发送大量数据
-
01-10-2019 - |
题
因此,我正在使用Apple的Pictures Haring/PicturesharingBrowser样本发送和接收数据。这使用服务器端上的NSFileHandle使用NSFileHandle的写入方法发送图片。
NSFileHandle * incomingConnection = [[aNotification userInfo] objectForKey:NSFileHandleNotificationFileHandleItem];
[[aNotification object] acceptConnectionInBackgroundAndNotify];
[incomingConnection writeData:dataToWrite];
[incomingConnection closeFile];
在我想发送大量数据(在这种情况下,价值1MB的数据)之前,这似乎很好。当我尝试此操作时,该应用程序在执行写入方法时会悬挂。客户端甚至没有开始读取数据,它只是打开了连接,但什么也不会发生。 (当服务器立即发送所有TEH数据时,应该读取数据块)。
我猜测某个僵局正在某个地方发生,但我不确定在哪里。我试图寻找异步。用nsfilehandle编写查克(Chuck)查克(Chuck)的方法,但我找不到这样的方法。
任何指导都会有所帮助!
解决方案
我基本上错过了一步...在nsnetservicebrowser的 NetServiceBrowser:DidFindService :( Morecoming: 委托方法,而不是我只是试图连接到每个传入服务,而是(如Doc所说:)保留服务,为该服务设置代表,并尝试解决服务。
然后,我能够在 * - (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.
不隶属于 StackOverflow