Получение данных с помощью Stream - PullRequest
0 голосов
/ 01 марта 2011

Я отправляю данные в программное обеспечение для дистанционного управления им.Моя проблема в том, что когда я что-то отправляю и не закрываю inpuStream и outputStream, приложение зависает.(возможно, ожидая ответа) Когда я отправляю что-то короткое и после того, как закрыл inputStream и outputStream, я не могу получить ответ, потому что диалоговое окно связи закрыто.

Я создаю потоковую пару с помощью этого метода.

CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)addr, port, &readStream, &writeStream);

    NSInputStream *inputStream = (NSInputStream *)readStream;
    NSOutputStream *outputStream = (NSOutputStream *)writeStream;
    [inputStream setDelegate:self];
    [outputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];
    [outputStream open];

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2012

Вы можете начать отправку в выходной поток, только если stream: handleEvent: сигнализирует о том, что поток готов получить ваши данные для отправки. И наоборот, если вы попытаетесь прочитать из потока, который не сигнализировал о наличии новых байтов, это также заблокирует.

Я написал DTBonjour для такого рода сценариев. Вы получаете простой и понятный API для подключения или публикации сервиса через WiFi. Затем вы просто передаете NSObjects соединению, и получатель получает декодированный объект. Не может быть проще в использовании: http://www.cocoanetics.com/2012/11/and-bonjour-to-you-too/

0 голосов
/ 01 марта 2011

Скорее всего, вам нужно закрыть только выходной поток после того, как вы закончите запись в него, чтобы другая сторона знала, что вы сделали, поэтому она запишет данные, которые вы можете прочитать во входном потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...