Python作為一種膠水語(yǔ)言,可以作為各領(lǐng)域的快速開(kāi)發(fā)工具,大大提高了開(kāi)發(fā)人員處理事務(wù)的效率。在互聯(lián)網(wǎng)行業(yè),無(wú)論是網(wǎng)絡(luò)服務(wù)器的開(kāi)發(fā),還是網(wǎng)絡(luò)客戶(hù)端的開(kāi)發(fā),比如爬蟲(chóng),都會(huì)涉及到底層的操作原理,也就是socket編程。今天我們就來(lái)介紹一下python下套接字編程開(kāi)發(fā)中的UDP協(xié)議編程過(guò)程。通過(guò)本文,我們可以對(duì)網(wǎng)絡(luò)編程中底層的UDP協(xié)議有一定的了解。
什么是UDP協(xié)議Udp,用戶(hù)數(shù)據(jù)報(bào)協(xié)議,是一種無(wú)連接且簡(jiǎn)單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用發(fā)送的數(shù)據(jù)包發(fā)出去,送到IP層,但不能保證能到達(dá)目的地。因?yàn)閁DP在傳輸數(shù)據(jù)報(bào)之前不需要在客戶(hù)端和服務(wù)器之間建立連接,也沒(méi)有超時(shí)重傳等機(jī)制,所以傳輸速度非???。
UDP是一種面向無(wú)連接的協(xié)議,每個(gè)數(shù)據(jù)包都是一個(gè)獨(dú)立的消息,包括完整的源地址或目的地址,通過(guò)網(wǎng)絡(luò)上任何可能的路徑傳輸?shù)侥康牡?,因此是否能到達(dá)目的地、到達(dá)目的地的時(shí)間以及內(nèi)容的正確性都無(wú)法保證。
UDP是面向消息的協(xié)議,通信時(shí)不需要建立連接,數(shù)據(jù)傳輸自然不可靠。UDP通常用于多點(diǎn)通信和實(shí)時(shí)數(shù)據(jù)服務(wù),例如:
發(fā)送小尺寸數(shù)據(jù)(如對(duì)DNS服務(wù)器進(jìn)行IP地址查詢(xún)時(shí))在接收到數(shù)據(jù),給出應(yīng)答較困難的網(wǎng)絡(luò)中使用UDP。(如:無(wú)線網(wǎng)絡(luò))適合于廣播/組播式通信中。MSN/QQ/Skype等即時(shí)通訊軟件的點(diǎn)對(duì)點(diǎn)文本通訊以及音視頻通訊通常采用UDP協(xié)議在流媒體、視頻點(diǎn)播、網(wǎng)絡(luò)電話和網(wǎng)絡(luò)電視等網(wǎng)絡(luò)多媒體服務(wù)中,UDP通常用于實(shí)時(shí)數(shù)據(jù)傳輸
python中提供了一個(gè)socket模塊,封裝了系統(tǒng)底層socket接口的python格式API。對(duì)于python開(kāi)發(fā)人員來(lái)說(shuō),套接字編程只有通過(guò)導(dǎo)入這個(gè)模塊才能實(shí)現(xiàn)。
按照C/S模式的要求,首先要有一個(gè)服務(wù)器,等待客戶(hù)端的請(qǐng)求,然后根據(jù)請(qǐng)求內(nèi)容提供服務(wù),所以UDP服務(wù)器的設(shè)計(jì)過(guò)程是:
1.應(yīng)用對(duì)象:從內(nèi)核申請(qǐng)一個(gè)具有UDP特性的套接字對(duì)象;
2.配置結(jié)構(gòu):服務(wù)器要監(jiān)控的端口和IP地址用元組結(jié)構(gòu)表示;
3.綁定結(jié)構(gòu):使用綁定系統(tǒng)調(diào)用通知內(nèi)核打開(kāi)哪個(gè)端口,哪個(gè)IP地址;
4.等待數(shù)據(jù):使用recvfrom接收數(shù)據(jù),如果沒(méi)有接收到數(shù)據(jù),則阻塞等待;
有了服務(wù)器之后,我們只需要設(shè)計(jì)一個(gè)客戶(hù)端,向服務(wù)器發(fā)送一個(gè)請(qǐng)求,就完成了C/S模型。
那么UDP的客戶(hù)端設(shè)計(jì)流程是:
1.應(yīng)用對(duì)象:從內(nèi)核申請(qǐng)一個(gè)具有UDP特性的套接字對(duì)象;
2.配置目標(biāo):作為客戶(hù)端,需要了解服務(wù)器的身份信息,才能將數(shù)據(jù)發(fā)送到指定地點(diǎn);
3.發(fā)送數(shù)據(jù):使用Send將數(shù)據(jù)發(fā)送到目標(biāo)地址;
1.《udpsocket Python技術(shù):socket編程之UDP編程》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《udpsocket Python技術(shù):socket編程之UDP編程》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/keji/1250516.html