同時に必要なのは、同時に接続されたクライアントのグループからのすべてのメッセージで動作するマルチクライアントサーバーです。 1つの簡単なコンセプトはモジュールSocketServer
から得られます。サーバーに着信メッセージの処理方法を伝えるには、要求ハンドラのサブクラスを作成する必要があります。
サーバー:
import SocketServer
PORT = xxxxx # Any port you desire
class RequestHandler(SocketServer.BaseRequestHandler) :
def handle(self) :
address = self.client_address()[0]
time_0 = time.time()
while True :
try :
buff = self.request.recv(1024)
time_1 = time.time()
self.request.send("Okay")
except SocketServer.socket.error :
print addr, ">> Connection Failure"
return
if time_1 - time_0 > 61 :
print addr, ">> Timeout"
return
# Now do something with the buffer
# ...
server = SocketServer.ThreadingTCPServer(('', PORT), RequestHandler)
server.server_forever()
は、あなたも、バッファを読んだ後、次のあなたのコマンドはあまりにも時間がかかることはありません確かに区別スレッドでserver.serve_forever()
を入れて、要求中にあなたのバッファで何もしない可能性があり取り扱い。したがって、イーサネットポートをリッスンしてバッファに書き込む1つのスレッドと、このバッファから読み込んでデータを処理するもう1つのスレッドがあります。
このバッファをクラスの属性にするか、グローバル変数を使用すると、このバッファを読み取ることができます。
クライアント:
import socket
import time
IP = xxx.xxx.xxx.xxx # The IP of the server
PORT = xxxxx # Same port on which the server is listening
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((IP, PORT))
while True :
time.sleep(60.0)
try :
sock.send("Some crazy message")
buff = sock.recv(1024)
if buff != "Okay" :
print "Something went wrong"
return
except socket.error :
print "Connection Failure"
break
PS:私は...だから何の保証も、このコードをテストしませんでした...返信用
感謝を!。しかし、ここでは、サブデバイスがメッセージを送信していない場合、どのようにエラーを取得することができます! –
この部分をrecieve_message_contentに配置します。サブデバイスがアクティブか非アクティブかをチェックします。彼は60秒後に再試行するよりも。あなたが関数を終了させたい場合は、returnを入れてください。 – user5056295