Запретить остановку приложения с помощью NSStream в режиме опроса - PullRequest
1 голос
/ 19 января 2012

Я реализовал передачу клиент-сервер из настольного приложения Windows в приложение iPhone.Я передаю данные с помощью NSStream в режиме опроса (синхронно).

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)urlStr, portNo, &readStream, &writeStream);

inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;

[inputStream open];
[outputStream open];

Все работает нормально, но когда я пытаюсь подключиться к несуществующему серверу или отключенному серверу или номер порта / IP-адрес неверный, WRITEметод объекта NSOutputStream, останавливает выполнение приложения.

const uint8_t *str = (uint8_t *) [strRichiesta cStringUsingEncoding:NSASCIIStringEncoding];
[outputStream write:str maxLength:strlen((char*)str)]; 

Можно ли управлять методом, вставляя элемент управления тайм-аутом?Если да, как я могу это сделать?

Я думаю, что та же проблема возникает и с методом READ объекта NSInputStream.

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

2 голосов
/ 19 января 2012

Проверьте функции NSStream s 'streamStatus и streamError, прежде чем пытаться использовать их для чтения и записи. См. Документацию Apple NSStream для получения дополнительной информации.

Это также может помочь: Настройка потоков сокетов

EDIT: Значения NSStreamStatus:

typedef enum {
    NSStreamStatusNotOpen = 0,
    NSStreamStatusOpening = 1,
    NSStreamStatusOpen = 2,
    NSStreamStatusReading = 3,
    NSStreamStatusWriting = 4,
    NSStreamStatusAtEnd = 5,
    NSStreamStatusClosed = 6,
    NSStreamStatusError = 7
};

Вам придется подождать, пока статус не станет Открытым, прежде чем использовать его. Плохой URL-адрес может преобразоваться в статус Ошибка несколько секунд (может быть, даже 30 секунд).

...