Какао NSOutputStream отправить в соединение - PullRequest
1 голос
/ 07 апреля 2010

Я новичок в Какао, но мне удалось установить и запустить соединение (с FTP), и я настроил обработчик событий для NSInputStream iStream для оповещения о каждом ответе (что также работает).

То, что мне удается получить, - это просто приветственное сообщение и тайм-аут соединения 60 секунд, закрывающий управляющее соединение.

РЕДАКТИРОВАТЬ: я думаю, мой вопрос "без закрытия-> открытия, что было бы неразрывным способом сброса outputStream?

После поиска в stackoverflow и нахождения множества проблем с записью NSOutputStream (например, Как использовать сообщение о записи NSOutputStream? ) и большого количества путаницы в моих хитах Google, я решил попытаться задать свой вопрос:

Я попытался прочитать документ developer.apple.com на OutputStream, но мне кажется почти невозможным отправить некоторые данные (в данном случае просто строку) в «соединение» через NSOutputStream oStream.

- (IBAction) send_something: sender
{
const char *send_command_char = [@"USER foo" UTF8String];
send_command_buffer = [NSMutableData dataWithBytes:send_command_char length:strlen(send_command_char) + 1];
uint8_t *readBytes = (uint8_t *)[send_command_buffer mutableBytes];
NSInteger byteIndex = 0;
readBytes += byteIndex;
int data_len = [send_command_buffer length];
unsigned int len = ((data_len - byteIndex >= 1024) ?
                    1024 : (data_len-byteIndex));
uint8_t buf[len];
(void)memcpy(buf, readBytes, len);
len = [oStream write:(const uint8_t *)buf maxLength:len];
byteIndex += len;
}

вышеупомянутое, по-видимому, не приводит к каким-либо полезным событиям. ввод его в NSStreamEventHasSpaceAvailable иногда дает ответ, если я спамлю FTP, продолжая создавать новые экземпляры соединения и продолжая посылать некоторые команды всякий раз, когда в oStream есть свободное место. Другими словами, ничего «правильного» и поэтому мне все еще непонятно, как правильно отправить команду на соединение. Должен ли я открывать -> писать -> закрывать каждый раз, когда я хочу записать в oStream (и, следовательно, в ftp), и могу ли я ожидать ответа (событие hasBytesAvailable на iStream)? РЕДАКТИРОВАТЬ: не похоже, что нет.

Почему-то мне очень трудно найти какие-либо четкие учебники по этому вопросу. Похоже, что у меня несколько человек в одной позиции: неясно, как использовать oStream write?

Пожалуйста! Любое, что может помочь прояснить это, очень ценится!

При необходимости я могу написать остальную часть кода.

  • Чак

1 Ответ

5 голосов
/ 07 апреля 2010

Хорошо, так что 10 часов 28 просмотров и без ответов / комментариев, но это нормально, потому что я только что решил это с некоторой хорошей помощью от очень и очень дружелюбного кодировщика irssi (без обрезания;)).

Он предложил мне попробовать std :: endl'e (newline + flush), и поэтому я попытался просто добавить символ новой строки char (\ n, 0x0A), и он работал отлично!

...