ソケットは、簡単なチャットのpythonであります

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()の

 

おすすめ

転載: www.cnblogs.com/yuanshuang-club/p/11541622.html