1. 程式人生 > 程式設計 >python網路程式設計 使用UDP、TCP協議收發資訊詳解

python網路程式設計 使用UDP、TCP協議收發資訊詳解

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()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。