python網路程式設計之UDP方式傳輸資料

2022-04-25 17:26:38 字數 3275 閱讀 1204

udp --- 使用者資料報協議(user datagram protocol),是乙個無連線的簡單的面向資料報的運輸層協議。

udp不提供可靠性,它只是把應用程式傳給ip層的資料報傳送出去,但是並不能保證它們能到達目的地。

由於udp在傳輸資料報前不用在客戶和伺服器之間建立乙個連線,且沒有超時重發等機制,故而傳輸速度很快。

開發環境:linux下pycharm3.5 

測試:使用terminal終端測試

使用 nc -u ip 埠 進行測試客戶端

使用 nc -lu ip 埠 進行測試伺服器端

1.udp伺服器端接受一次資料

import

socket

#設定伺服器預設埠號

port = 9002

#建立乙個套接字socket物件,用於進行通訊##

socket.sock_dgram 指明使用資料協議,即使用傳輸層的udp協議

server_socket =socket.socket(socket.af_inet, socket.sock_dgram)

address = (""

, port)

#為伺服器繫結乙個固定的位址,ip和埠

server_socket.bind(address)

#接收客戶端傳來的資料 recvfrom接收客戶端的資料,預設是阻塞的,直到有客戶端傳來資料

#recvfrom 引數的意義,表示最大能接收多少資料,單位是位元組

#recvfrom返回值說明

#receive_data表示接受到的傳來的資料,是bytes型別, receive_data.decode()解碼,將bytes型別轉換為字串型別

#client_address 表示傳來資料的客戶端的身份資訊,客戶端的ip和埠,元組

receive_data, client = server_socket.recvfrom(1024)

print("

來自客戶端%s,傳送的%s

" %(client, receive_data.decode()))

#不再接收資料的時候,將套接字socket關閉

server_socket.close()

測試:

2.udp服務端迴圈多次接受資料

import

socket

port = 9002server_socket =socket.socket(socket.af_inet, socket.sock_dgram)

address = ("

192.168.219.129

", port)

server_socket.bind(address)

while

true:

receive_data, client_address = server_socket.recvfrom(1024)

print("

接收到了客戶端 %s 傳來的資料: %s

" % (client_address, receive_data.decode()))

3.udp客戶端接受一次資料

import

socket

client_socket =socket.socket(socket.af_inet, socket.sock_dgram)

msg = input("

請輸入要傳送的內容:

") #

字串型別, 通過msg.encode() 編碼 轉換為bytes型別

server_address = ("

127.0.0.1

", 8000) #

接收方 伺服器的ip位址和埠號

client_socket.sendto(msg.encode(), server_address)

client_socket.close()

4.udp客戶端迴圈多次接受資料

import

socket

client_socket =socket.socket(socket.af_inet, socket.sock_dgram)

while

true:

msg = input("

請輸入要傳送的內容:

")

server_address = ("

192.168.79.127

", 8000)

client_socket.sendto(msg.encode(), server_address)

5.udp伺服器端迴圈多次接受傳送資料

import

socket

port = 8000server_socket =socket.socket(socket.af_inet, socket.sock_dgram)

address = (""

, port)

server_socket.bind(address)

while

true:

receive_data, client_address = server_socket.recvfrom(1024)

print("

接收到了客戶端 %s 傳來的資料: %s

" %(client_address, receive_data.decode()))

server_socket.sendto(receive_data, client_address)

6.udp客戶端迴圈多次接受傳送資料

import

socket

client_socket =socket.socket(socket.af_inet, socket.sock_dgram)

while

true:

msg = input("

請輸入要傳送的內容:

") server_address = ("", 8000)

client_socket.sendto(msg.encode(), server_address)

receive_data, sender_address = client_socket.recvfrom(1024)

print("

接受到了傳送方 %s 傳來的資料: %s

" % (sender_address, receive_data.decode()))

Python網路程式設計之UDP

udp處理資料報,是一種無連線的協議 伺服器端 server socket.socket socket.af inet,socket.sock dgram 繫結ip server.bind 192.168.1.104 221 while true 接收 data,address server.rec...

Python 網路程式設計之 UDP 協議

tcpudp 連線性面向連線 面向無連線 傳輸可靠性 可靠不可靠 傳輸模式 流資料報 應用場景 傳輸大量的資料 少量資料速度慢 快tcp tcp 的可靠體現在傳輸資料之前,會有三次握手來建立連線。在資料傳完後,還會斷開連線用來節約系統資源。在資料傳遞時,有確認機制 重傳機制 擁塞控制機制以保證傳輸的...

Python網路程式設計之UDP協議

注 這只是乙個udp協議的簡單演示,覺得簡單了可以不看 import socket 用於指定位元組的長度 bufsize 1024 前面的引數代表主機名,後面的代表埠號 ip port 127.0.0.2 9999 udp協議 server socket.socket socket.af inet,...