pythonベースのTCP / IPプロトコル・サーバ(同時にプロセスを接続する複数のクライアントをサポート)
コードは以下の通りであります:
1 インポートスレッド 2 インポートソケット 3 4 5 クラスサーバー(オブジェクト): 6 "" " 服务端""" 7 8 デフ __init__ (自己): 9 = self.server_socket socket.socket(はsocket.AF_INET、socket.SOCK_STREAM) 10 self.Address =(" 192.168.67.102 "、7890 ) 11 self.server_socket.bind(self.Address) 12 self.server_socket.listen(128 ) 13 self.clientsocket = dictの() 14 = self.count 0 15 self.isrunning = dictの() 16 。17 DEF WaitClient(自己): 18であり ながら真: 19 プリント(" ......クライアントの接続を待機中" ) 20は、 ClientSocket、clientAddresss = 自己。 server_socket.accept() 21は、 プリント(" %Sが正常に接続されています!"%STR(clientAddresss)) 22である #1 印刷(ClientSocket、clientAddresss) 23である self.count。1 = + 24 self.clientsocket [clientAddresss] =ClientSocket 25 プリント(" クライアント接続の現在の数:Dの%"%のself.clientsocket。__len__ ()) 26れる self.isrunning [self.count] = Trueの 27 プリント(" 要素のセット:%のS "% STR(self.isrunning。__len__ ())) 28 threading.Thread =のT(目標= self.RecvMsg、引数= (ClientSocket、clientAddresss、self.isrunning、self.count)) 29 threading.Thread =(目標のT1 =セルフ.SendMsg、引数の= (ClientSocket、clientAddresss、self.isrunning、self.count)) 30 t.start() 31れます t1.start() 32 33である DEFののrecvmsg(セルフ、クライアント、ClientAddressに、isrun、COUNT): 34である IF isrun [COUNT]はIS :真 35 ながらTRUE: 36 試み: 37 のrecvmsg = client.recv(1024 ) 38は、 印刷(" メッセージは%sからです:%sの"%(STR(ClientAddressに)、recvmsg.decode(" UTF-8。" ))) 39 を除いてRET aSに例外: 40 印刷(" !%sのクライアントが行っている"%STR (ClientAddressに)) 41は client.close() 42は isrun [COUNT] = Falseの 43である self.clientsocket.pop(ClientAddressに) 44である BREAK 45 他: 46である 返す 47 48 DEF :SENDMSG(セルフ、クライアント、clientAddresss、isrun、COUNT) 49 一方がTRUE: 50 入力= sendstr(「あなたが送信するメッセージを入力してください:」) 51 IF isrun [COUNT]はある真:#は、最初のクライアントがまだあるかどうかを判断する 52 場合はクライアント: 53 client.send(sendstr.encode(" UTF-8 " )) 54 他: 55 isrun.pop(カウント) 56 リターン 57 58 59 60 DEF メイン(): 61 "" " 测试函数""" 62 S = サーバー( ) 63 S.WaitClient() 64 65 なら __name__ == ' __main__ ' : 66 メイン()
クライアントコードは次のよう:
インポートソケット インポートスレッド クラスクライアント(オブジェクト): "" " 客户端""" DEF __init__ (自己): self.client_socket = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM) self.Address =(" 192.168.67.102 "、9090 ) self.client_socket.bind(self.Address) self.server_Address =(" 192.168.67.102 "、7890 ) DEF 接続サーバー(自己): プリント(self.client_socket) self.client_socket.connect(self.server_Address) 印刷(" !成功した接続" ) T1 threading.Thread(対象=の= self.SendMsg) T2 threading.Threadの=(対象= self.RecvMsg) t1.start() t2.start() DEFとのrecvmsg(セルフ): しばらく真: recvstr = self.client_socket.recv(1024 ) プリント(" :%Sサーバの寸法から受信したメッセージである"%のrecvstr.decode(" UTF-8 " )) DEF SENDMSG(自己): 一方TRUE: sendstr = INPUT (" あなたが送信するメッセージを入力してください:" ) self.client_socket.send(sendstr.encode(" UTF-8。" )) DEF メイン(): "" " テスト機能" "" C = クライアント() C.ConnectionServer( ) IF __name__ == ' __main__ ' : main()の