スレッドを使用して各クライアントを処理するサーバクライアントプログラムを作成しようとしていますが、サーバは一度に1クライアントしか受け付けません。最初のクライアントが切断すると、2番目のクライアントが受け入れられます。さらに、各クライアントはデータを1回しか送信できず、プログラムはそれ以上送信できません。Pythonソケットサーバは一度に1クライアントしか処理できません
投稿する前に、私は以下を含む、他の多くのスタックオーバーフローの記事を見てきました:
how can I make a server communicate with more than 1 client at the same time?
My Python socket server can only receive one message from the client
しかし、私が発見したこれらの記事を見て解決策はありません。ここで
は、サーバーコードである:ここで
import socket
from threading import *
def main():
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('172.20.3.62', 5000))
s.listen(1)
clients = []
print("listening")
def clienthandler(c):
clients.append(c)
try:
while True:
data = c.recv(1024).decode("UTF-8")
if not data:
break
else:
print(data)
for client in clients:
client.send(data.encode("UTF-8"))
except:
clients.remove(c)
c.close()
while True:
c, addr = s.accept()
print("accepted a client")
Thread(target=clienthandler(c)).start()
if __name__ == '__main__':
main()
は、クライアントコードは次のとおりです。ユーザーRawingへ
import socket
from threading import *
def main():
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('172.20.3.62', 5000))
print("connected")
def send():
msg = input("ENTER:")
s.send(msg.encode("UTF-8"))
def receive():
while True:
data = s.recv(1024).decode("UTF-8")
if data:
print(data)
else:
break
Thread(target=send).start()
Thread(target=receive).start()
if __name__ == '__main__':
main()
'Thread(target = clienthandler(c))' - > 'Thread(target = clienthandler、args =(c、))' –
@Rawingそんなにありがとう!あなたはそれを完全に解決しました!また、クライアントを一度だけ送信して解決し、ループに入れるのを忘れてしまった。 – ajflj