在Python下進行UDP網路程式設計的教程

2022-09-27 08:33:12 字數 1305 閱讀 9222

tcp是建立可靠連線,並且通訊雙方都可以以流的形式傳送資料。相對tcp,udp則是面向無連線的協議。

使用udp協議時,不需要建立連線,只需要知道對方的ip位址和埠號,就可以直接發資料報。但是,能不能到達就不知道了。

雖然用udp傳輸資料不可靠,但www.cppcns.com它的優點是和tcp比,速度快,對於不要求可靠到達的資料,就可以使用udp協議。

我們來看看如何通過udp協議傳輸資料。和tcp類似,使用udp的通訊雙方也分為客戶端和伺服器。伺服器首先需要繫結埠:

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

# 繫結埠:

s.bind(('127.0.0.1', 9999))

建立socket時,sock_dgram指定了這個socket的型別是udp。繫結埠和tcp一樣,但是不需要呼叫listen()方法,而是直接接收來自任何客戶端的資料:

print ' udp on 9999...'

while true:

# 接收資料:

data, addr = s.recvfrom(1024)

print 'received from %s:%s.' % addr

s.sendto('hello, %s!' % data, addr)

recvfrom()方法返回資料和客戶端的位址與埠,這樣,伺服器收到資料後,直接呼叫sendto()就程式設計客棧可以把資料用udp發給客戶端。

注意這裡省掉了多執行緒,因為這個例子很簡單。

客戶端使用udp時,首先仍然建立基於udp的seunnmvyeovocket,然後,不需要呼叫connect(),直接通過sendto()給伺服器發資料:

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

for data in ['michael', 'tracy', 'sarah']:

# 傳送資料:

s.sendto(data, ('127.0.0.1', 9999))

# 接收資料:

print s.recv(1024)

s.close()

從伺服器接收資料仍然呼叫recv()方法。

仍然用兩個命令列分別啟動伺服器和客戶www.cppcns.com端測試,結果如下:

小結udp的使用與tcp類似,但是不需要建立連線。此外,伺服器繫結udp埠和tcp埠互不衝突,也就是說,udp的9999埠與tcp的9999埠可以各自繫結。

原始碼參考:

本文標題: 在python下進行udp網路程式設計的教程

本文位址:

在ROS中使用UDP進行通訊

原鏈結 ros的網路通訊提供了兩種方式,一種是tcp協議,一種是udp協議。預設採用tcp進行通訊。但是在實際的wifi網路使用中發現使用者經常反饋客戶端和機械人連線中斷且無法重新建立連線。在ros wiki中官方也有說明,rostcp更適合有線網連線的網路,而rosudp更適合wifi等網路不可靠...

網路程式設計 06 使用 UDP 進行讀寫

三 cmake 管理當前專案 四 測試 udp 例子 小結sendto 傳送報文函式 include ssize t sendto int sockfd,const void buff,size t nbytes,int flags,const struct sockaddr to,socklen ...

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...