python實現TCP服務器與多個客戶端通信案例

 1.TCP實現服務器端與多個客戶端通信

import socket

def main():
    # 1. 創建套接字socket
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 綁定本地信息 bind
    tcp_server_socket.bind(("", 7890))

    # 3. 讓默認的套接字由主動變爲被動 listen
    tcp_server_socket.listen(128)

    while True:
        print("等待一個新的客戶端的到來...")
        # 4. 等待別人的電話到來(等待客戶端的鏈接 accept)
        new_client_socket, client_addr = tcp_server_socket.accept()

        print("一個新的客戶端已經到來%s" % str(client_addr))

        # 接收客戶端發送過來的請求
        recv_data = new_client_socket.recv(1024) #注意這個1024byte,大小根據需求自己設置
        print("客戶端福送過來的請求是:%s" % recv_data.decode("utf-8"))

        # 回送一部分數據給客戶端
        new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))

        # 關閉套接字
        # 關閉accept返回的套接字 意味着 不會在爲這個客戶端服務
        new_client_socket.close()
        print("已經服務器完畢。。。。")

    # 如果將監聽套接字 關閉了,那麼會導致 不能再次等待新客戶端的到來,即xxxx.accept就會失敗
    tcp_server_socket.close()


if __name__ == "__main__":
    main()

2.TCP實現與多個客戶端多次通信

import socket

def main():
    # 1.創建套接字 socket
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 綁定本地信息 bind
    tcp_server_socket.bind(("", 7890))

    # 3. 讓默認的套接字由主動變爲被動 listen
    tcp_server_socket.listen(128)

    # 循環目的:調用多次accept,從而爲多個客戶端服務
    while True:
        print("等待一個新的客戶端的到來...")
        # 4. 等待別人的電話到來(等待客戶端的鏈接 accept)
        new_client_socket, client_addr = tcp_server_socket.accept()

        print("一個新的客戶端已經到來%s" % str(client_addr))
        
        # 循環目的: 爲同一個客戶端 服務多次
        while True:
            # 接收客戶端發送過來的請求
            recv_data = new_client_socket.recv(1024)
            print("客戶端福送過來的請求是:%s" % recv_data.decode("utf-8"))

            # 如果recv解堵塞,那麼有2種方式:
            # 1. 客戶端發送過來數據
            # 2. 客戶端調用close導致而了 這裏 recv解堵塞(客戶端主動斷開連接)
            if recv_data:
                # 回送一部分數據給客戶端
                new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
            else:
                break

        # 關閉套接字
        # 關閉accept返回的套接字 意味着 不會在爲這個客戶端服務
        new_client_socket.close()
        print("已經爲這個客戶端服務完畢。。。。")

    # 如果將監聽套接字 關閉了,那麼會導致 不能再次等待新客戶端的到來,即xxxx.accept就會失敗
    tcp_server_socket.close()


if __name__ == "__main__":
    main()

可以通過網絡調試助手實現多個客戶端同時與其通信,但是問題必須是一個個通信,排隊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章