python socketプログラミングtcpプロトコルマルチクライアント接続


1.socketの紹介:
ソケット、ジャック、コンピュータでは一般的にソケットと呼ばれています.同じコンピュータの中の2つのプログラムはファイル、パイプ、キューなどの方法で通信することができます.しかし,ネットワークでは2台のコンピュータ間の通信はsocketによる通信が必要である.
2.socketのtcpプロトコル:
tcpプロトコル英語:Transmission Control Protocol,中国語:転送制御プロトコルは、tcp/ipプロトコルファミリーのプロトコルであり、ネットワークプロトコル層に属する転送層である.接続向けで、安定して(パケットが失われないことを指す)、伝送速度が遅い(udpプロトコルに対して)プロトコルです.
3.pythonコード実装:
クライアントクライアントクライアント:
import socket


#   TCP   socket  ,SOCK_STREAM   tcp    
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#      ,   ,           ip  ,         
address = ("", 2426)

#          
clientSocket.connect(address)
while True:
    message = input("client send:")  #             
    #            send      ,
    #  python2                
    clientSocket.send(message.encode("utf-8"))
    if len(message) == 0:
        break
#         ,         
clientSocket.close()
print("     ")

サーバ側server:
import socket
from multiprocessing import Process


def get_client_message(clientSocket, clientInfo):
    #                  ,           ,    ,     
    while True:
        recv_data = clientSocket.recv(1024)
        if len(recv_data) == 0:
            break
        else:
            print("    %s:%s" % (clientInfo, recv_data.decode("utf-8")))
    print("   %s    " % (clientInfo,))
    clientSocket.close()


if __name__ == '__main__':
    #      socket  
    serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    addre = ("", 2426)
    #         
    serverSocket.bind(addre)
    #     ,               
    serverSocket.listen(5)
    while True:
        #       socket      ip,    ,
        # accept()          ,      
        clientSocket, clientInfo = serverSocket.accept()
        #      ,     
        process = Process(target=get_client_message, args=(clientSocket, clientInfo))
        process.start()
        process.join()
    serverSocket.close()

4.注意点:
  • 同じ時点でポートごとに1つのプロセスしか占有できないため、1つのクライアントと接続チャネルを確立するしかなく、プログラムは複数のクライアントを同時に傍受することができる.
  • 複数のクライアントが同時に接続されると、接続中のクライアントがポートを解放するのを待つ待機に入ります.

  • 最後に、指摘を歓迎しますが、友軍ですから、口を開かないでください.