2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

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

 豆寶有蟲吃 2019-07-12

回顧

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

TCP協(xié)議基本概念

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

我們已經(jīng)知道,UDP協(xié)議是一種無連接的協(xié)議,在通信開始之前,不需要建立相關(guān)的連接,只需要發(fā)送數(shù)據(jù)即可。但是TCP協(xié)議是面向連接的協(xié)議,在通信開始之前,一定要先建立相關(guān)的連接才能發(fā)送數(shù)據(jù)。這也是UDP協(xié)議和TCP協(xié)議的一個較大的區(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客戶端程序的步驟有點類似,不同的是,由于TCP協(xié)議是面向連接的,在創(chuàng)建TCP客戶端程序時需要在收發(fā)數(shù)據(jù)前首先做一個連接服務(wù)器的操作。創(chuàng)建TCP客戶端程序的步驟如下:1、創(chuàng)建TCP客戶端套接字。2、連接服務(wù)器。3、發(fā)送/接收數(shù)據(jù)。4、關(guān)閉套接字。

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

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多