UDP/TCP 流程與總結


1 UDP流程

前序:可以借助網絡調試助手工具進行使用

1 UDP 發送方

  • 1 創建UDP套接字 2 准備目標(發送方) IP和端口 3 需要發送的數據內容 4 關閉套接字

    from socket import *
    
    # 1 創建套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)
    
    # 2 准備接收方地址 IP和端口
    dest_addr = ('172.20.10.2', 8899)
    
    # 3 要發送的數據
    send_data = input("請輸入你要發送的數據:")
    
    # 發送數據到指定的ip電腦上
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
    
    # 5 關閉套接字
    udp_socket.close()
    

2 UDP接收方

  • 1 創建udp套接字 2 綁定本地ip和端口 3 等待對方發送數據 4 關閉套接字

    from socket import *
    
    # 1 創建套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)
    
    # 2 綁定本地信息和端口 '' 會自動尋找本地ip
    local_addr = ('', 8899)
    # 綁定端口--> 這里綁定端口是因為端口會有變化
    udp_socket.bind(local_addr)
    # 3 等待接收對方發送過來的數據
    print("正在等待對方")
    
    recv_data = udp_socket.recvfrom(1024)  # 表示接收1024個字節
    
    # 4 顯示數據 --> 返回的是一個元祖
    print("對方發送的數據:")
    print(recv_data[0].decode("gbk"))  # 第一個返回的是數據
    print(recv_data[1])  # 返回的是ip和端口
    
    # 5 關閉套接字
    udp_socket.close()
    
    
    

2 TCP流程

前序:tcp是面向連接、可靠傳輸的超文本傳輸控制協議 ,只有客戶端與服務器雙方通信之后,才能發送數據

1 TCP客戶端(發送方)

  • 1 創建套接字 2 連接服務器 3 發送/接收服務器數據 4 關閉套接字

    from socket import *
    
    # 1 創建TCP套接字
    tcp_client_socket = socket(AF_INET, SOCK_STREAM)
    
    # 2 連接服務器
    tcp_client_socket.connect(("172.20.10.2", 8080))  # 元祖(id, port)
    
    # 3 要發送的數據
    send_data = input("請輸入要發送的數據:")
    
    # 4 向服務器發送數據
    tcp_client_socket.send(send_data.encode("utf-8"))
    
    # 5 關閉套接字
    tcp_client_socket.close()
    
    
    

2 TCP服務器(接收方)

  • 1 創建TCP套接字 2 綁定本地ip和端口 3 開啟監聽模式(將主動連接套接字改為被動連接套接字) 4 等待客戶端連接 5 客戶端連接成功用套接字為其服務 6 先等待客戶端關閉連接,然后緊接着關閉服務器套接字

    import socket
    
    # 1 創建套接字
    server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 2 綁定本地信息
    server_s.bind(("", 8899))
    
    # 3 將套接字設置為被動連接
    server_s.listen(128)  # 開啟監聽listen, 將服務器的主動連接設置為被動連接
    
    # 4 等待客戶端的請求連接
    print("等待客戶端連接")
    new_s, client_info = server_s.accept()
    print("客戶端已連接上服務器,當前客戶端的信息:", client_info)
    
    # 5 接收客服端的數據請求,向客服端發送數據
    while True:
        # 接收客服端的數據請求
        recv_content = new_s.recv(1024)
        print("客戶端發送的消息:")
        print("{}>>>>{}".format(str(client_info), recv_content.decode("gbk")))
    
        # 如果沒有連接
        if not recv_content:
            # 當客戶端調用了close后,recv 返回值就為空,此時服務器就可以關閉連接
            new_s.close()
            break
    
    # 6 關閉監聽套接字
    server_s.close()
    
    
    

3 TCP/UDP 總結和區別

UDP優缺點

  • UDP是一種面向無連接的通信協議,UDP 數據包括目的端口號和信息內容
  • 優點: 1 UDP傳輸速度快, 2 操作簡單,要求的系統資源較少 3 由於UDP通訊不需要連接,因此可以實現廣播發送
  • 缺點: UDP由於傳送數據之前不需要與對方建立連接,對接收到的數據也不會發生確認信號,發送端也不確定數據的發送是否會正確接收,因此傳輸的數據不可靠

TCP優缺點

  • TCP是面向連接的通訊協議,通訊雙方需要建立三次握手建立連接、通訊完成時通過四次握手關閉連接的一種通信協議
  • 優點:TCP在數據傳遞時,有確認機制,窗口、超時重傳、阻塞等控制機制,能夠保證數據的正確性,可靠性。
  • 缺點: TCP相對於UDP傳輸數據速度較慢,要求的系統資源要多。

文筆有限,如有遺漏請自行百度

2020.6.13

GuangHua


免責聲明!

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



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