UDP網絡程序,客戶端和服務端交互原理


創建一個udp客戶端程序的流程是簡單,具體步驟如下:

  • 創建客戶端套接字
  • 發送/接收數據
  • 關閉套接字

UDP是面向無連接的通訊協議,UDP數據包括目的端口號和源端口號信息,由於通訊不需要連接,所以可以實現廣播發送。 UDP傳輸數據時有大小限制,每個被傳輸的數據報必須限定在64KB之內。 UDP是一個不可靠的協議,發送方所發送的數據報並不一定以相同的次序到達接收方。

UDP是一種面向無連接的協議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能被保證的。但UDP操作簡單,而且僅需要較少的監護,因此通常用於局域網高可靠性的分散系統中client/server應用程序。例如視頻會議系統,並不要求音頻視頻數據絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會更合理一些。

現在給大家展現一個關於服務端和客戶端的交互端口程序代碼如下,具體介紹在代碼中有詳細的注明:

'''

socket(簡稱 套接字) 是進程間通信的一種方式,它與其他進程間通信的一個主要不同是:

它能實現不同主機間的進程間通信,我們網絡上各種各樣的服務大多都是基於 Socket 來完成通信的

例如我們每天瀏覽網頁、QQ 聊天、收發 email 等等


'''

客戶端代碼:

from socket import *
# 發起udp請求 resSocket=socket(AF_INET,SOCK_DGRAM) # 要發送的地址,服務端地址 sendAddr=('192.168.8.195',8888) # 綁定本地端口 # ip地址和端口號,ip一般不用寫,表示本機的任何一個ip resSocket.bind(('192.168.8.195',6666)) #發送方也可以綁定 # resSocket.bind(bindAddr) n=10 while n>0: # 4. 發送數據到指定的電腦上 # 第一個參數是二進制對象,要將字符串轉換為二進制對象, # 需要使用encode方法,根據對方接收什么編碼,進行解碼。 sendData = input('請輸入客戶端要發送的數據:') # sendData要用encode('gbk')編碼成byte型 resSocket.sendto(sendData.encode('gbk'), sendAddr) # 接收服務端信息 recvData=resSocket.recvfrom(1024) # 發送的內容recvData[0].decode('gbk')要用decode進行解碼,解碼的類型和發送端編碼類型一致 print('發送方%s,端口號%s:%s'%(recvData[1][0],recvData[1][1],recvData[0].decode('gbk'))) n=n-1 resSocket.close()

服務端代碼:

from socket import *
#1. 創建套接字
# 創建請求協議
# SOCK_DGRAM表示UDP協議,AF_INET表示ipv4
udpSocket=socket(AF_INET,SOCK_DGRAM)


# 發送/接收數據
#2. 准備接收方的地址
# 准備要發送數據到的客戶ip地址,即客戶端
sendAddr=('192.168.8.195',6666)
# 綁定本端口地址,服務端和客戶端ip地址可以一樣但是端口必須不一樣
udpSocket.bind(('192.168.8.195',8888))
n=10
while n>0:
    # 第一時間接收客戶端到信息,
    recvData=udpSocket.recvfrom(1024)
    # 輸出收到的信息
    print('發送方:%s端口號:%s:%s'%(recvData[1][0],recvData[1][1],recvData[0].decode('gbk')))
    # 3. 從鍵盤獲取數據
    sendData = input('請輸入要發送的數據:')
    # 4. 發送數據到指定的電腦上:向客戶端發送數據
    udpSocket.sendto(sendData.encode('gbk'), sendAddr)

    n=n-1
# 5關閉請求協議(關閉套接字)
udpSocket.close()

 


免責聲明!

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



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