マルチスレッドTCPエコーサーバをPython 3.6で作成しましたが、メッセージを送信しようとするまですべて正常に動作します(サーバにメッセージを送信してエコーバックできます)受信されていない2番目のクライアントと私は2番目を送信しようとすると私にBrokenPipeエラーを与える。私はここでサイトを見回しましたが、私が見つけたのは、Python 2.7の解決策であり、ThreadingMixIn関数に言及しましたが、これはスレッドモジュールのドキュメントでは見つかりませんでした。これは私のサーバーのコードです:Python 3.6複数のクライアント用のマルチスレッドTCPエコーサーバ
#!/usr/bin/env python3
import socket,sys,threading
def accept_connection(tcp_socket):
(client_socket,(ip,port))=tcp_socket.accept()
print("Accepted connection from %s on port %d"%(ip,port))
return (client_socket,ip,port)
def client_action(client_socket,ip,port):
data=client_socket.recv(2048)
print("Sending back: %s to %s on %d"%(data.decode(),ip,port))
client_socket.send(data)
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
tcp_socket.bind((sys.argv[1],int(sys.argv[2])))
tcp_socket.listen(2)
print("Listening incoming connections...")
(client_socket,ip,port)=accept_connection(tcp_socket)
while True:
Connections_Handler=threading.Thread(target=accept_connection,args=(tcp_socket,))
Connections_Handler.start()
Client_Handler=threading.Thread(target=client_action,args=(client_socket,ip,port,))
Client_Handler.start()
Client_Handler.join()
私は問題がClient_Handler.join(によってブロックされている可能性がありますclient_socketかもしれないと思う)ので、それが2番目のクライアントの新しい値を保存することはできませんが、私は」わからない。次に、私は、2つのクライアントをサーバーに「話す」ようにして、それぞれの「エコーメッセージ」を送信することができるようにしたいと考えました。 これは私のクライアントコード(それらの両方)である:私はここで間違っ
#!/usr/bin/env python3
import socket,sys
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_socket.connect((sys.argv[1],int(sys.argv[2])))
print("Connecting to server %s on port %d..."%(sys.argv[1],int(sys.argv[2])))
while True:
message=input("Input message to send: ")
tcp_socket.send(message.encode())
print(tcp_socket.recv(2048).decode())
何をやっていますか?
[Python 3で変数/テキストをLAN経由で送信/同期](http://stackoverflow.com/questions/30224933/send-sync-variable-text-over-lan-in-python-3)の可能な複製 –