python網路程式設計 使用UDP、TCP協議收發資訊詳解
阿新 • • 發佈:2020-01-09
UDP
UDP是面向無連線的通訊協議,UDP資料包括目的埠號和源埠號資訊,由於通訊不需要連線,所以可以實現廣播發送。 UDP傳輸資料時有大小限制,每個被傳輸的資料報必須限定在64KB之內。 UDP是一個不可靠的協議,傳送方所傳送的資料報並不一定以相同的次序到達接收方。
udp通訊模型中,在通訊開始之前,不需要建立相關的連結,只需要傳送資料即可,類似於生活中,"寫信"。
客戶端:
from socket import socket,AF_INET,SOCK_DGRAM # 建立套接字,SOCK_DGRAM使用udp協議 udp = socket(AF_INET,SOCK_DGRAM) # 目的埠和ip ip = "127.0.0.1" port = 8080 # 迴圈從鍵盤輸入傳送訊息 while True: data = input("請輸入傳送的資料:") udp.sendto(data.encode("utf-8"),(ip,port))
服務端:
from socket import socket,SOCK_DGRAM udp = socket(AF_INET,SOCK_DGRAM) # 繫結埠,服務端必須要繫結埠 udp.bind(("",8080)) while True: # 接受資料,每次接受1024位元組 recvData = udp.recvfrom(1024) # 拆包 data,info = recvData # 列印 print("[%s]:%s" % (info,data.decode("utf-8")))
TCP
udp通訊模型中,在通訊開始之前,一定要先建立相關的連結,才能傳送資料,類似於生活中,"打電話"。
客戶端:
from socket import socket,SOCK_STREAM # 建立套接字,SOCK_STREAM表示使用tcp協議 clientSocket = socket(AF_INET,SOCK_STREAM) # 連線伺服器 clientSocket.connect(("127.0.0.1",8080)) # 傳送資料 while True: s = input("請輸入要傳送的資料:") clientSocket.send(s.encode("utf-8"))
服務端:
from socket import socket,SOCK_STREAM tcp = socket(AF_INET,SOCK_STREAM) # 繫結埠 tcp.bind(("",8080)) # listen的引數代表可建立socket連線的最大個數 windows,mac 此連線引數有效 Linux 此連線引數無效,預設最大 tcp.listen() # 有新的客戶端連線時, # clientSocket表示一個新的套接字 # clientInfo 表示新客戶端的ip及埠號 while True: clientSocket,clientInfo = tcp.accept() try: while True: recvData = clientSocket.recv(1024) # 如果接受的的資料為空就退出 if not recvData: break print("%s:%s" % (str(clientInfo),recvData.decode("utf-8"))) finally: clientSocket.close()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。