現在CentOS上でPythonのftplibを使用したプログラムを作成しているのですが、
動作上問題が生じて、私の力では解決出来ませんでしたので質問させて頂きます。
問題というのは、ファイルをダウンロード中に何らかの形で通信が途切れると、
エラーが発生しないまま処理が止まってしまう、というものです。
以下にコードを記します。
ftp = FTP(host)
ftp.login(user, passwd)
fp = open("file.jpg", "wb")
ftp.retrbinary("RETR file.jpg", fp.write)
fp.close()
ftp.quit()
希望としては、通信が切断された際に例外処理を行いたいと考えています。
解決策や代替案をお持ちの方がいらっしゃいましたら、お力添えお願いします。
No.2ベストアンサー
- 回答日時:
うっかりしていました・・・
TCPでは、無通信状態でのネットワーク障害の検知はちょっと厄介ですね。
TCPに付いてくるKeepAliveを利用する手もありますが、本格的に使用すると
なると力不足だった記憶があります。
import socket
ftp.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
あとは、自前で無意味なデータ照会を定期的に繰り返し、応答がタイムアウト
した場合はネットワーク障害とみなす方法があります。
(大抵の有名ドコロのFTPクライアントはこちらの実装ではないでしょうか)
No.1
- 回答日時:
おそらくですが、処理が止まるのは次のデータを待っているからでは?
TCP接続の基礎ですね。
タイムアウト時間を短くしてみるのも手です。
class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])¶(原文)
(中略)
オプションの timeout 引数は、コネクションの接続時など、ブロックする操作におけるタイムアウト時間を秒数で指定します。 (指定されなかった場合、グローバルのデフォルトタイムアウト設定が利用されます。)
バージョン 2.6 で変更: timeout が追加されました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サーバー Googleドライブなどを使わずにテザリングAndroidでWindowsとファイル共有 1 2023/02/19 13:14
- プロバイダー・ISP hpb22の接続方法の変更 1 2023/08/06 18:47
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- ドメイン・サーバー・クラウドサービス FileZillaを使用してwpXサーバーに接続できない 2 2022/03/29 21:02
- サーバー FTPサーバについて詳しい方(アクセス権のないディレクトリを非表示にする方法) 4 2022/08/22 22:33
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- HTML・CSS 詳しい方に質問です。 早急に解決したいと思っています。 ポートフォリオをMacBook で作成したと 2 2023/05/12 17:40
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- PHP ファイルアップロードの上限を増やす 7 2023/06/23 12:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
RS-232Cでバイナリデータを受信...
-
socket: recvはいつ,どれだけ...
-
VC++2010 TCPIP通信の受信処理...
-
recv関数の受信結果について
-
MSCommでoutputできない
-
メールを数日後に自動返信
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
VB6での二重起動(複数起動)の制...
-
VBSの処理中一旦処理を止めて再...
-
プログラミング ソースコード
-
C言語で、メモリを解放しないで...
-
バックグラウンドのプロセスの...
-
エクセルのvbaで検索ボタンを作る
-
UdpClient 送信元のIPアドレ...
-
プロセスIDの取得方法について
-
Webプログラムってネイティブア...
-
MACで動く実行ファイルをWindow...
-
なんかC言語でプログラム書いて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
WriteFile()でのデータ送信がで...
-
winsockでソケット通信の開発を...
-
「スイッチングハブのバッファ...
-
socket: recvはいつ,どれだけ...
-
シリアル通信の出力バッファと...
-
Connection reset by peer
-
RS232C通信(PC⇔PLC)
-
RS-232Cでバイナリデータを受信...
-
WaitForMultipleObjects関数の...
-
Linuxでのシリアル通信について...
-
rs232cでの受信データ(mscomm)...
-
UDP処理のエラーについて
-
SocketのSend関数でのCLOSEの検...
-
ソケット通信内 read関数について
-
recv関数の受信結果について
-
シリアルポート通信
-
MSCommでoutputできない
-
SerialPortのDataReceivedイベ...
-
COMポートの同時オープン同時読...
おすすめ情報