最近、Pythonの退屈に陥った後、私はPythonでソケットプログラミングを学ぶことに決めました。それはかなりうまく行きました、私はTCP接続を確立することができました。コード全体を一時停止することなく、サーバーへのクライアント接続をリスンすることは可能ですか?
その後、私はGUIをコードに追加してより良いものにし始めました。その問題は、関数s.listen()を呼び出すと、クライアントが接続するまでコード全体が一時停止し、GUIモジュール(Pygame)では受け入れられず、遅延が発生し、イベント処理ループが崩壊するためです。だから私はクライアントが私のサーバーに接続している場合は、ループ全体を一時停止せずにチェックのいくつかの他の方法があるのだろうかと思っていた。
私はマルチスレッドしてみてくださいでした:
#Wait for Connection then accept
Connection = False
def a():
global Connection
text = 'waiting for connection'
while Connection==False:
print(text)
time.sleep(1)
if text == 'waiting for connection...':
text = 'waiting for connection'
else:
text = text+'.'
def b():
global Connection
s.listen(1)
print("con")
Connection=True
WaitScreen = threading.Thread(target=a)
WaitClient = threading.Thread(target=b)
WaitScreen.start()
WaitClient.start()
しかし無駄に。
ご意見がありましたらお知らせください。スタックオーバーフローは私の最後の手段です。私はGoogleと私が持っているすべての本のいたるところを見てきました。多分、コード全体を一時停止するのではなく、クライアントが接続しようとしているときにtrueを返す関数。何でも大歓迎です。
ありがとうございました
はい、可能ですソケットと非ブロックソケットオプションとselect関数:ノンブロッキングソケットを参照してください。https://docs.python.org/2/howto/sockets.html David Beazleyもここで興味深い概念をカバーしています:https://www.youtube.com /時計?v = MCs5OvhV9S4 –