1

我是 Cocoa 的新手,但不是编程新手。最近我决定要为 Mac 编写一个 FTP 客户端,所以我首先用我最熟悉的语言(在 Windows 上)编写它,然后当我的 FTP 通信工作失败时转向 Cocoa。

我的问题(显然)有点争议:如何建立到(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,而且据我在这里和谷歌上搜索到的,NSStream 能够“切换”到 SSL 连接。

我无法看到正在建立的连接(我通常能够做到),但我也听说过必须在流打开之前写入流?

任何指针都非常感谢,如果我的问题很烦人,我很抱歉 - 我是 Cocoa 的新手 :)

4

2 回答 2

1

所以当我说我是 Cocoa 的新手时,我的意思是每一个字。原来上面的代码毕竟有效,我只是看不到它,因为我希望在这一行建立连接: [NSStream getStreamsToHost:host port:3333 inputStream:&iStream outputStream:&oStream]; 但直到我在底部添加了一个 NSRunAlert 之后才进行调试。

我不确定我是不是更尴尬而不是困惑嘿嘿。

于 2010-04-05T16:30:33.190 回答
0

You need to implement handleEvent delegate method and watch what is happening to your Input and Output stream objects... Take a look at the docs, it's explained there!

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
于 2010-04-13T17:49:25.350 回答