TCP是創建可靠鏈接, 而且通訊雙方均可以以流的形式發送數據。 相對TCP, UDP則是面向無鏈接的協議。使用UDP協議時, 不須要創建鏈接, 只須要知道對方的IP地址和端口號, 就能夠直接發數據包。 可是, 能不能到達就不知道了。服務器
咱們來看看如何經過UDP協議傳輸數據。 和TCP相似, 使用UDP的通訊雙方也分爲
客戶端和服務器
socket實現UDP通訊的結構圖
socket
和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的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