2017-12-29 37 views
3

を接続しているかどうかを確認する方法:パイソン - ソケットがまだ私は自明である次のコードを、持っている

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(host, port) 
s.send("some data") 
# don't close socket just yet... 
# do some other stuff with the data (normal string operations) 
if s.stillconnected() is true: 
    s.send("some more data") 
if s.stillconnected() is false: 
    # recreate the socket and reconnect 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect(host, port) 
    s.send("some more data") 
s.close() 

私は盲目的にソケットを再作成したくないどのように私はs.stillconnected() を実装するのですが。

+0

いい仕事+1ですが、ここにあなたの賞金に関するコメントがあります:https://superuser.com/questions/955266/prevent-windows-7-sleep-while-files-are-being-accessed-by-networkそしてletそれらのコメントの中に役立つものがあれば教えてください。 –

答えて

3

sendメソッドを呼び出すと例外がスローされるため、try-exceptionブロックを使用してデータを送信し、スローされた場合は例外をキャッチして接続を再確立します。

try: 
    s.send("some more data") 
except: 
    # recreate the socket and reconnect 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect(host, port) 
    s.send("some more data") 

EDIT:ジャン=ポール・Calderoneのコメント@を1として、低い代わりにsendの、すべてのデータを送信したり、エラーをスローし、より高いレベルの方法であるsendall方法を、使用することを検討してくださいすべてのデータの送信を保証しないレベルメソッド、またはハンドリングできるHTTPライブラリのようなより高レベルのモジュールを使用するeソケットライフサイクル。

+1

はいこれがうまくいきました:)ありがとう! –

+0

は、try/exceptブロックを使用せずに、stillConnected()関数を実装できるより効率的な方法ですか? ;もしそうなら、あなたの答えにそれを加えてください。 –

+0

それはうまくいった:)現時点では、これは私が考えることができる最善の方法です。データを受信して​​いる場合は、接続が終了したときに空の文字列が受信されるまで、データの受信を継続するwhileループを試すこともできます。 –

関連する問題