私は次のコードを持っていますが、これは自明です:
_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()
を実装するにはどうすればよいですか。ソケットを盲目的に再作成したくありません。
サーバー接続が機能しなくなった場合、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 [〜#〜]:@ Jean-Paul Calderoneのコメントによると、すべてを送信する高レベルのメソッドであるsendall
メソッドの使用を検討してください。すべてのデータの送信を保証しない低レベルのメソッドであるsend
の代わりに、データまたはエラーをスローしますOR HTTPライブラリのような高レベルのモジュールを使用しますソケットのライフサイクルを処理できます。