私は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
ますか?