在Python下進(jìn)行UDP網(wǎng)絡(luò)編程的教程
TCP是建立可靠連接,并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。相對TCP,UDP則是面向無連接的協(xié)議。
使用UDP協(xié)議時,不需要建立連接,只需要知道對方的IP地址和端口號,就可以直接發(fā)數(shù)據(jù)包。但是,能不能到達(dá)就不知道了。
雖然用UDP傳輸數(shù)據(jù)不可靠,但它的優(yōu)點是和TCP比,速度快,對于不要求可靠到達(dá)的數(shù)據(jù),就可以使用UDP協(xié)議。
我們來看看如何通過UDP協(xié)議傳輸數(shù)據(jù)。和TCP類似,使用UDP的通信雙方也分為客戶端和服務(wù)器。服務(wù)器首先需要綁定端口:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 綁定端口: s.bind(('127.0.0.1', 9999))
創(chuàng)建Socket時,SOCK_DGRAM指定了這個Socket的類型是UDP。綁定端口和TCP一樣,但是不需要調(diào)用listen()方法,而是直接接收來自任何客戶端的數(shù)據(jù):
print 'Bind UDP on 9999...' while True: # 接收數(shù)據(jù): data, addr = s.recvfrom(1024) print 'Received from %s:%s.' % addr s.sendto('Hello, %s!' % data, addr)
recvfrom()方法返回數(shù)據(jù)和客戶端的地址與端口,這樣,服務(wù)器收到數(shù)據(jù)后,直接調(diào)用sendto()就可以把數(shù)據(jù)用UDP發(fā)給客戶端。
注意這里省掉了多線程,因為這個例子很簡單。
客戶端使用UDP時,首先仍然創(chuàng)建基于UDP的Socket,然后,不需要調(diào)用connect(),直接通過sendto()給服務(wù)器發(fā)數(shù)據(jù):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) for data in ['Michael', 'Tracy', 'Sarah']: # 發(fā)送數(shù)據(jù): s.sendto(data, ('127.0.0.1', 9999)) # 接收數(shù)據(jù): print s.recv(1024) s.close()
從服務(wù)器接收數(shù)據(jù)仍然調(diào)用recv()方法。
仍然用兩個命令行分別啟動服務(wù)器和客戶端測試,結(jié)果如下:
小結(jié)
UDP的使用與TCP類似,但是不需要建立連接。此外,服務(wù)器綁定UDP端口和TCP端口互不沖突,也就是說,UDP的9999端口與TCP的9999端口可以各自綁定。
源碼參考:https://github.com/michaelliao/learn-python/tree/master/socket
- Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】
- python網(wǎng)絡(luò)編程 使用UDP、TCP協(xié)議收發(fā)信息詳解
- Python網(wǎng)絡(luò)編程之TCP與UDP協(xié)議套接字用法示例
- Python的Socket編程過程中實現(xiàn)UDP端口復(fù)用的實例分享
- python網(wǎng)絡(luò)編程之?dāng)?shù)據(jù)傳輸U(kuò)DP實例分析
- python網(wǎng)絡(luò)編程之UDP通信實例(含服務(wù)器端、客戶端、UDP廣播例子)
- 詳解python tcp編程
- python 19個值得學(xué)習(xí)的編程技巧
- 詳解Python IO編程
- 詳解python UDP 編程
相關(guān)文章
python實現(xiàn)對圖片進(jìn)行旋轉(zhuǎn),放縮,裁剪的功能
今天小編就為大家分享一篇python實現(xiàn)對圖片進(jìn)行旋轉(zhuǎn),放縮,裁剪的功能,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python使用redis pool的一種單例實現(xiàn)方式
這篇文章主要介紹了Python使用redis pool的一種單例實現(xiàn)方式,結(jié)合實例形式分析了Python操作redis模塊實現(xiàn)共享同一個連接池的相關(guān)技巧,需要的朋友可以參考下2016-04-04