免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Python網(wǎng)絡(luò)編程(四)

回顧

在《Python進(jìn)階記錄之網(wǎng)絡(luò)編程(三)》中,我們介紹了如何利用UDP server和UDP client實(shí)現(xiàn)簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)聊天。今天我們講一下與UDP協(xié)議相對(duì)應(yīng)的另一種傳輸層協(xié)議——TCP協(xié)議。

TCP協(xié)議基本概念

TCP協(xié)議的全稱是傳輸控制協(xié)議,是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能,是同一層內(nèi)除UDP協(xié)議外另一個(gè)重要的傳輸協(xié)議。

我們已經(jīng)知道,UDP協(xié)議是一種無(wú)連接的協(xié)議,在通信開始之前,不需要建立相關(guān)的連接,只需要發(fā)送數(shù)據(jù)即可。但是TCP協(xié)議是面向連接的協(xié)議,在通信開始之前,一定要先建立相關(guān)的連接才能發(fā)送數(shù)據(jù)。這也是UDP協(xié)議和TCP協(xié)議的一個(gè)較大的區(qū)別。

與UDP協(xié)議類似,在Python中,我們?nèi)匀皇褂胹ocket模塊的socket( )方法創(chuàng)建基于TCP協(xié)議的Socket套接字。

創(chuàng)建基于TCP協(xié)議的套接字

TCP協(xié)議是基于字節(jié)流的傳輸層通信協(xié)議,因此Type參數(shù)需要設(shè)置成SOCK_STREAM。

創(chuàng)建TCP客戶端程序

創(chuàng)建TCP客戶端程序的步驟與創(chuàng)建UDP客戶端程序的步驟有點(diǎn)類似,不同的是,由于TCP協(xié)議是面向連接的,在創(chuàng)建TCP客戶端程序時(shí)需要在收發(fā)數(shù)據(jù)前首先做一個(gè)連接服務(wù)器的操作。創(chuàng)建TCP客戶端程序的步驟如下:1、創(chuàng)建TCP客戶端套接字。2、連接服務(wù)器。3、發(fā)送/接收數(shù)據(jù)。4、關(guān)閉套接字。

創(chuàng)建TCP客戶端程序

Python中使用socket對(duì)象的connect( )方法幫助TCP客戶端連接指定服務(wù)器,該方法接收一個(gè)元組,內(nèi)容包括IP地址和端口號(hào)。這里使用的是我的本機(jī)IP和默認(rèn)端口號(hào),可以根據(jù)需要自行修改。

像介紹UDP協(xié)議時(shí)一樣,我們?nèi)匀皇褂胹okit網(wǎng)絡(luò)通信調(diào)試助手來(lái)幫助我們進(jìn)行測(cè)試。啟動(dòng)sokit網(wǎng)絡(luò)通信調(diào)試助手,設(shè)置一個(gè)TCP server,在TCP Addr中填入IP地址,在Port中填入端口號(hào),然后點(diǎn)擊TCP Listen啟動(dòng)TCP server。

TCP客戶端與服務(wù)端進(jìn)行收發(fā)數(shù)據(jù)

待TCP server啟動(dòng)后,我們運(yùn)行上述TCP客戶端程序,就可以順利進(jìn)行發(fā)送/接收數(shù)據(jù)了。我們可以對(duì)比之前的UDP客戶端程序代碼,創(chuàng)建時(shí)只是多了一步連接服務(wù)器的步驟,這也是TCP協(xié)議與UDP協(xié)議的一大不同之處。

創(chuàng)建TCP服務(wù)端程序

和TCP客戶端程序相比,創(chuàng)建TCP服務(wù)端程序會(huì)更復(fù)雜一些。與UDP服務(wù)端程序類似,TCP服務(wù)端程序首先也需要綁定一個(gè)端口號(hào),同時(shí),TCP服務(wù)端程序還需要監(jiān)聽來(lái)自其他客戶端的連接。如果某個(gè)客戶端連接過(guò)來(lái)了,服務(wù)器就與該客戶端建立Socket連接,隨后的通信就靠這個(gè)Socket連接了。

創(chuàng)建TCP服務(wù)端程序

Python中使用socket對(duì)象的listen( )方法來(lái)監(jiān)聽端口,傳入的參數(shù)表示等待連接的最大數(shù)量,傳入5即表示等待連接的數(shù)量不能超過(guò)5。

運(yùn)行該TCP服務(wù)端程序后,服務(wù)器就會(huì)打開固定端口(比如我們?cè)O(shè)置的端口為12345)監(jiān)聽,接下來(lái),該程序會(huì)自動(dòng)通過(guò)一個(gè)永久循環(huán)來(lái)接受來(lái)自客戶端的連接,Python中使用socket對(duì)象的accept( )方法等待并返回一個(gè)客戶端的連接。每成功監(jiān)聽到一個(gè)客戶端連接,TCP服務(wù)端程序就會(huì)創(chuàng)建該Socket連接。由于服務(wù)端可能會(huì)有大量來(lái)自客戶端的連接,所以,TCP服務(wù)端程序要能夠區(qū)分一個(gè)Socket連接是和哪個(gè)客戶端綁定的。我們使用兩個(gè)變量來(lái)接收accept( )方法返回的當(dāng)前連接客戶端的套接字和客戶端地址信息。

我們借助sokit網(wǎng)絡(luò)通信調(diào)試助手,創(chuàng)建一個(gè)TCP client,輸入Server IP和Port,Port中填入我們代碼中指定的端口號(hào),點(diǎn)擊TCP Channel。連接后就可以給TCP服務(wù)端程序發(fā)送數(shù)據(jù)了。

TCP服務(wù)端接收客戶端連接

需要注意的是,由于TCP服務(wù)端程序需要同時(shí)響應(yīng)多個(gè)客戶端的請(qǐng)求,所以,每個(gè)連接都需要一個(gè)新的進(jìn)程或者新的線程來(lái)處理。上述代碼我們簡(jiǎn)化了程序,一次只能服務(wù)一個(gè)客戶端,接收一條數(shù)據(jù)后就終止了程序,而實(shí)際開發(fā)中往往會(huì)借助進(jìn)程或線程。

總結(jié)

以上內(nèi)容介紹了TCP協(xié)議的基本概念以及使用Python創(chuàng)建簡(jiǎn)單的TCP客戶端與TCP服務(wù)端程序,需要重點(diǎn)掌握TCP協(xié)議與UDP協(xié)議的區(qū)別,能夠熟練創(chuàng)建基于TCP協(xié)議的客戶端與服務(wù)端程序。感謝大家的支持與關(guān)注,歡迎一起學(xué)習(xí)交流~

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
《Python程序設(shè)計(jì)》第10章 網(wǎng)絡(luò)編程
Python的互聯(lián)網(wǎng)編程
物聯(lián)網(wǎng)核心技術(shù)之Netty入門到精通課程
Python網(wǎng)絡(luò)編程
socket通信協(xié)議關(guān)系詳解
十二講:網(wǎng)絡(luò)編程
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服