0

我为 ftp 请求创建了一个输入流,如下所示:

ftpStream = CFReadStreamCreateWithFTPURL(NULL, (CFURLRef) url);

networkStream = (NSInputStream *) ftpStream;        

[self.networkStream read:<#(uint8_t *)#> maxLength:<#(NSUInteger)#>]

当我读取数据时,如果无法连接服务器,程序会卡在上面的第三行。是否有一种方法可以在您可以定义的几秒钟后停止连接?或者如果有其他方法来解决这个问题?

4

1 回答 1

0

不要做一个同步的read。相反,在流对象上设置一个委托,将其安排在运行循环上,然后调用-open. 如果您在应用程序的主线程上,此时只需将控制权返回给框架,它就会为您运行运行循环。如果您在后台线程上或编写命令行工具,请自己运行线程的运行循环。当有数据要读取时,您的委托将被调用。

要为连接建立超时,您可以在运行循环上安排一个计时器。或者,如果您自己运行运行循环,您可以限制运行它的时间。如果时间在建立连接之前到期,只需关闭流。

于 2012-05-12T13:30:50.103 回答