Какао NSStream TCP соединение с FTP - PullRequest
1 голос
/ 05 апреля 2010

Я новичок в Какао, но не в программировании. Недавно я решил, что хочу написать FTP-клиент для Mac, и поэтому я сначала сделал это на языке, на котором мне удобнее всего (в Windows), а затем перешел к Какао, когда у меня прекратилась работа FTP-связи. 1001 *

Мой вопрос (по-видимому) немного спорный: как мне установить соединение для чтения / записи с (ftp-сервером)?

Что у меня есть (очевидно, не работает):

NSInputStream *iStream;
NSOutputStream *oStream;
NSHost *host = [NSHost hostWithAddress:@"127.0.0.1"];
[NSStream getStreamsToHost:host port:3333 inputStream:&iStream outputStream:&oStream];
// ftp port: 3333
[iStream retain];
[oStream retain];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
             forMode:NSDefaultRunLoopMode];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
             forMode:NSDefaultRunLoopMode];
[iStream setDelegate:self];
[oStream setDelegate:self]; // which is not implemented apparently
[iStream open];
[oStream open];
// .... [iStream write: (const uint8_t *)buf maxLength:8];

Что частично основано на http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Streams/Articles/NetworkStreams.html Теперь, почему я выбрал NSStream? Потому что, хотя этот вопрос просто о том, как подключиться к потоку FTP, весь мой проект также будет включать SSL, и, насколько мне удалось найти здесь и в Google, NSStream способен «переключаться» на соединение SSL.

Мне не удалось увидеть установление соединения (что я обычно могу сделать), но я также слышал что-то о необходимости записи в поток до того, как поток откроется?

Любые указатели очень ценятся, и извините, если мой вопрос раздражает - я новичок в Какао:)

Ответы [ 2 ]

1 голос
/ 05 апреля 2010

Поэтому, когда я сказал, что я новичок в Какао, я имел в виду каждое слово этого. Оказывается, что приведенный выше код работает в конце концов, я просто не смог его увидеть, потому что ожидал, что соединение будет выполнено в этой строке: [NSStream getStreamsToHost: порт хоста: 3333 inputStream: & iStream outputStream: & oStream]; но это не было сделано, пока после NSRunAlert я не добавил внизу для отладки.

Я не уверен, что более смущен, чем запутался, хе-хе.

0 голосов
/ 13 апреля 2010

Вам необходимо реализовать метод делегата handleEvent и наблюдать за тем, что происходит с вашими объектами потока ввода и вывода ... Посмотрите на документы, там все объяснено!

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
...