Tcp數據傳輸server/client


server主要的步驟:

1、創建套接字-->2、綁定服務器的信息—>3、默認的套接字由主動變為被動 listen-->4、等待客戶端的鏈接

# 如果recv解堵塞,那么有2種方式:
# 1. 客戶端發送過來數據
# 2. 客戶端調用close導致而了 這里 recv解堵塞
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()

client端

   # 1. 創建tcp的套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 鏈接服務器
    server_ip = input("請輸入要鏈接的服務器的ip:")
    server_port = int(input("請輸入要鏈接的服務器的port:"))
    server_addr = (server_ip, server_port)
    tcp_socket.connect(server_addr)

    # 3. 發送數據/接收數據
    send_data = input("請輸入要發送的數據:")
    tcp_socket.send(send_data.encode("utf-8"))

    # 4. 關閉套接字
    tcp_socket.close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM