我正在使用 Apple 的SimpleFTPSample示例代码的编辑版本,特别是“PUT”部分。里面有这个方法:
- (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 的情况下做到这一点?
- - 更新 - -
我发现在关闭连接之前,我必须向 ftp 服务器发送“QUIT”,以便让他知道我要断开连接。但是我怎样才能实现将“QUIT”命令发送到SimpleFTPSample
?