2017-08-31 7 views
0

をPythonのストリームソケットに置いて、デバイスがオンラインで生きているかどうかをどうやって確認できますか?Pythonソケットストリームデバイスがオンラインの場合の制御方法

ここでは、例です:

import socket 

HOST = 'localhost' 
PORT = 9876 
ADDR = (HOST,PORT) 
BUFSIZE = 4096 
videofile = "videos/royalty-free_footage_wien_18_640x360.mp4" 

bytes = open(videofile).read() 

print len(bytes) 

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client.connect(ADDR) 

client.sendall(bytes) # ---> Here i have to check if the device it's online 

client.close() 

このタイプのデバイスは、それがオンラインではない場合、私はデータを失わないようにするために全体の送信を再試行する必要があり、ので、それは、私にとって非常に重要です確認してください。

ありがとうございました。

+0

サーバーがリッスンしていない場合はTCP経由で接続できません。したがって、接続が機能していれば、オンラインになります。 –

+0

これはファイル転送のようです。 rsyncやsftpのような目的のために構築されたより高いレベルとカスタムを使用することはできませんか? –

答えて

0

これはTCPなので、リモートエンドがダウンしている場合は、接続コールでConnectionRefusedErrorのような例外が発生するはずです。あなたはそれを捕まえて、必要なことをすることができます。

+0

私は知っていますが、リモートエンドポイントが接続し、ファイル転送の途中でシャットダウンすると、転送を再試行できますか? – VirtApp

+0

これを行うには、プロトコルを設計する必要があります。どのくらい受け取ったかについて、リモート側から何らかの確認をしてデータを送信してください。 'sendall'はすべてのデータを送るために' send'を繰り返し呼び出すループです。失敗した場合にどれくらい送られたかは言うことができません。このため、適切なファイル転送プロトコルとツールを使用することをお勧めしました。 –

+0

残念ながら、それは不可能です。もう片方のエンドポイントはソケットストリームだけを受け取り、それ以外は受け付けません。 私が.recv(4)を呼び出そうとしても、私は応答を得ません – VirtApp

関連する問題