python大佬養成計劃----socket實現UDP通訊

UDP

TCP是創建可靠鏈接, 而且通訊雙方均可以以流的形式發送數據。 相對TCP, UDP則是面向無鏈接的協議。使用UDP協議時, 不須要創建鏈接, 只須要知道對方的IP地址和端口號, 就能夠直接發數據包。 可是, 能不能到達就不知道了。服務器

咱們來看看如何經過UDP協議傳輸數據。 和TCP相似, 使用UDP的通訊雙方也分爲
客戶端和服務器
socket實現UDP通訊的結構圖
圖片描述socket

UDP服務端

和TCP相似, 使用UDP的通訊雙方也分爲客戶端和服務器。 服務器首先須要綁定端口。但不須要監聽客戶端的鏈接測試

#server
import socket
#建立Socket時, SOCK_DGRAM 指定了這個Socket的類型是UDP。
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('192.168.1.165',7890))
#不須要調用 listen() 方法, 而是直接接收來自任何客戶端的數據
print('服務端已開啓7890端口,正在等待被鏈接...')
#recvfrom() 方法返回數據和客戶端的地址與端口, 這樣, 服務器收到數據後,
#直接調用 sendto() 就能夠把數據用UDP發給客戶端
data,address = server.recvfrom(1024)
print("client>>",data.decode('utf-8'))
print("客戶端鏈接的socket地址:",  address)
server.sendto(b'drink more water!',address)
server.close()

UDP客戶端

客戶端使用UDP時, 首先仍然建立基於UDP的Socket, 而後, 不須要調用 connect() , 直接經過 sendto() 給服務器發數據spa

import socket
#建立Socket時, SOCK_DGRAM 指定了這個Socket的類型是UDP。
client = socket.socket(type=socket.SOCK_DGRAM)
send_data  =b'hello sheenstar'
client.sendto(send_data,('192.168.1.165',7890))
re_Data,address = client.recvfrom(1024)
print('server>>',re_Data.decode('utf-8'))
client.close()

測試結果

用兩個命令行分別啓動服務器和客戶端測試
開啓服務端
圖片描述命令行

完成一次UDP通訊
圖片描述code

相關文章
相關標籤/搜索