我正在使用苹果公司SimpleFTPSample示例代码的编辑版本,特别是“PUT”部分。其中有这种方法:NSConnection关闭时不从FTP断开连接
- (void)stopSendWithStatus:(NSString *)statusString
{
if (self.networkStream != nil) {
[self.networkStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
self.networkStream.delegate = nil;
[self.networkStream close];
self.networkStream = nil;
}
if (self.fileStream != nil) {
[self.fileStream close];
self.fileStream = nil;
}
[self sendDidStopWithStatus:statusString];
uploaderbusy = 0;
}
问题是上传后应用程序不关闭连接。上面的代码被执行。这两个IF语句都是正确的,并且内部的代码被执行。
此代码:
NSLog(@"%lu",[self.networkStream streamStatus]);
[self.networkStream close];
NSLog(@"%lu",[self.networkStream streamStatus]);
给出了这样的输出:
2013-03-03 17:50:26.460 Stockuploader[575:303] 2
2013-03-03 17:50:26.498 Stockuploader[575:303] 6
但连接保持打开状态,并最终超时。这是FTP服务器的日志:
(000006)03/03/2013 17.50.27 - root2 (192.168.0.3)> 150 Connection accepted
(000006)03/03/2013 17.50.27 - root2 (192.168.0.3)> 226 Transfer OK
(000006)03/03/2013 17.52.28 - root2 (192.168.0.3)> 421 Connection timed out.
(000006)03/03/2013 17.52.28 - root2 (192.168.0.3)> disconnected.
这是为什么?
如果我关闭程序,那么连接立即在FTP上关闭。难道是我不得不释放self.filestream?如果是这样,我怎么能用ARC启用它?
---- ---- UPDATE
我发现,在我关闭连接我要送“退出”到FTP服务器,以让他知道,我想断开连接。但我怎样才能实现发送“QUIT”命令到SimpleFTPSample
?
'[self.networkStream关闭]'应关闭连接。你使用哪个ftp服务器? – 2013-03-03 17:51:35
我在网络中的另一台电脑上使用filezilla。如果我关闭连接,然后重新打开一个新文件的流,那么它不会再次发送用户名和密码。它会刚刚开始上传文件。如果连接已关闭,则应重新记录... streamstatus正在返回6,这意味着它已关闭。但是,只要我关闭程序或超时,FTP就会断开连接。也许我不得不dealloc流,但与ARC启用我得到一个错误。 – sharkyenergy 2013-03-03 17:54:57
我不确定您是否可以重新使用相同的'self.networkStream'作为新连接,我假设您必须创建一个新连接。但这并不能解释关闭超时。 - (我不能测试这个,因为我有一台Mac和Filezilla Server似乎只有Windows。) – 2013-03-03 18:06:16