Вопрос

Поэтому я использую образцы Apple Picturaling / PictionsharingBrowser для отправки и получения данных. Это использует NSFileHandle на стороне сервера, чтобы отправить изображение с использованием метода NSFilehandle Wantedata.

NSFileHandle * incomingConnection = [[aNotification userInfo] objectForKey:NSFileHandleNotificationFileHandleItem];

[[aNotification object] acceptConnectionInBackgroundAndNotify];
[incomingConnection writeData:dataToWrite];
[incomingConnection closeFile];

Это, кажется, работает нормально, пока не захочу прислать большие объемы данных (в этом случае 1 МБ данных стоимостью). Когда я пытаюсь этому, приложение зависает при выполнении метода писателей. Клиент даже не начинает читать данные, он просто открывает соединение, но ничего не происходит. (Предполагается, что он читает кусок данных с помощью куска, а сервер отправляет все данные TEH одновременно).

Я предполагаю, что некоторые тупики происходят где-то, но я не уверен, где. Я пытался искать async. Способ написания данных Чака Chuck с nsfilehandle, но я не мог найти такой путь.

Любое руководство поможет!

Это было полезно?

Решение

Я пропустил один шаг в основном ... в NsnetserviceBoSwer's NetserviceBrowser: Didfindservice :( Morecoming: Способ делегата, а не мне просто пытаться подключиться к каждому входящему сервису, я вместо этого (как говорит Док :)) Сохранить сервис, установите делегат для этого нашли службу и попытаться разрешить услугу.

Я тогда могу открыть поток в разрешенную службу в * - (void) netservicedidresolleddress: (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