Я новичок в Какао, но мне удалось установить и запустить соединение (с 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?
Пожалуйста! Любое, что может помочь прояснить это, очень ценится!
При необходимости я могу написать остальную часть кода.