因此,我正在使用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.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top