怎么在python3中利用Socket實(shí)現(xiàn)通信-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)怎么在python3中利用Socket實(shí)現(xiàn)通信,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們擁有十多年網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁(yè)設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信開(kāi)發(fā)、小程序制作、手機(jī)網(wǎng)站開(kāi)發(fā)、成都h5網(wǎng)站建設(shè)、等業(yè)務(wù)。無(wú)論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。

服務(wù)器上socket編寫(xiě)步驟:

1.調(diào)用socket函數(shù)創(chuàng)建socket對(duì)象,如:

socket_server = socket.socket(family,type)

family參數(shù)代表地址家族,可為AF_INET(Internet通信)或AF_UNIX(同一臺(tái)機(jī)器上進(jìn)程間通信)。

type參數(shù)代表套接字類型,可為SOCK_STREAM(流套接字)和SOCK_DGRAM(數(shù)據(jù)報(bào)套接字)。

2.使用socket對(duì)象的bind方法,將socket綁定到指定地址,如:

socket_server.bind(address)

由AF_INET所創(chuàng)建的套接字,address必須是一組雙元素元組,格式為(host,port)。

3.使用socket對(duì)象的listen方法接受連接請(qǐng)求,如:

socket_server.listen(backlog)

backlog指定最多允許多少個(gè)客戶連接到服務(wù)器,至少為1,如果達(dá)到設(shè)定值,則拒絕接受新請(qǐng)求。

4.服務(wù)器套接字通過(guò)socket對(duì)象的accept方法等待客戶請(qǐng)求一個(gè)連接,如:

connection,address = socket_server.accept()

運(yùn)行accept方法后,socket進(jìn)入“waiting”狀態(tài),等待客戶請(qǐng)求連接。當(dāng)客戶請(qǐng)求連接時(shí),accept方法建立連接并返回服務(wù)器,返回一組含兩個(gè)元素的元組(connection,address)。 connection是新的socket對(duì)象,服務(wù)器必須通過(guò)這個(gè)新的對(duì)象與客戶端進(jìn)行通信 ;address是客戶端的Internet地址。

5.處理階段,服務(wù)器和客戶端通過(guò)“send”和“recv”方法通信:

服務(wù)器調(diào)用send,并采用 二進(jìn)制   形式向客戶發(fā)送信息。send方法返回已發(fā)送的字符個(gè)數(shù)。

服務(wù)器使用recv方法從客戶端接受信息,調(diào)用recv時(shí),服務(wù)器必須指定一個(gè)整數(shù)來(lái)表示可通過(guò)本次方法調(diào)用來(lái)接受的大數(shù)據(jù)量。recv方法在接收數(shù)據(jù)時(shí)會(huì)進(jìn)入“blocked”狀態(tài),最后返回一個(gè)字符串,它表示收到的數(shù)據(jù)。如果發(fā)送數(shù)據(jù)量超過(guò)recv所允許,數(shù)據(jù)會(huì)被截?cái)?。多余的?shù)據(jù)將緩沖到接收端。以后調(diào)用recv時(shí),多余的數(shù)據(jù)會(huì)從緩沖區(qū)刪除。

6.傳輸結(jié)束,調(diào)用socket對(duì)象的close方法關(guān)閉連接,如:

connection.close()

socket_server.close()

注意:這里先關(guān)閉accept創(chuàng)建的新socket(connection)然后關(guān)閉服務(wù)器端socket(socket_server)

客戶端上socket編寫(xiě)步驟:

1.創(chuàng)建一個(gè)socket以連接服務(wù)器,如:

socket_client = socket.socket(family,type)

2.使用connect方法連接服務(wù)器,對(duì)于AF_INET而言鏈接格式如:

socket_client.connect((host,port))

host代表主服務(wù)器主機(jī)名或IP,port為服務(wù)器進(jìn)程所綁定的端口號(hào)。

3.處理階段,客戶端和服務(wù)器端通過(guò)send與recv方法進(jìn)行通信 4.傳輸結(jié)束,調(diào)用close方法關(guān)閉連接,如:

socket_client.close()

注意這里的socket_client是第一步創(chuàng)建的對(duì)象,而服務(wù)器端使用的是accept創(chuàng)建的新socket(connection)

關(guān)于TCP的三次握手建立連接和四次揮手?jǐn)嚅_(kāi)連接這里不做敘述(徹底講解我功夫不到家,不敢亂說(shuō)),把圖轉(zhuǎn)來(lái)大家看一下(這個(gè)感覺(jué)很基礎(chǔ), 但很重要):

怎么在python3中利用Socket實(shí)現(xiàn)通信

三次握手

怎么在python3中利用Socket實(shí)現(xiàn)通信

四次揮手

程序如下:

服務(wù)器端:

怎么在python3中利用Socket實(shí)現(xiàn)通信

環(huán)境與服務(wù)器配置信息

怎么在python3中利用Socket實(shí)現(xiàn)通信

接收文件方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

發(fā)送文件方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

處理命令1(接收、發(fā)送)方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

處理命令2(顯示可下載文件)方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

服務(wù)器端運(yùn)行主體

客戶端:

怎么在python3中利用Socket實(shí)現(xiàn)通信

環(huán)境與服務(wù)器配置

怎么在python3中利用Socket實(shí)現(xiàn)通信

接收文件方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

發(fā)送文件方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

確認(rèn)服務(wù)器端消息方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

處理命令1(接收、發(fā)送)方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

處理命令2(顯示可下載文件)方法

怎么在python3中利用Socket實(shí)現(xiàn)通信

客戶端運(yùn)行主體

運(yùn)行說(shuō)明:

1.首先建立server.py和client.py文件,并分別置于兩個(gè)不同的位置,如圖:

怎么在python3中利用Socket實(shí)現(xiàn)通信

Server文件夾及其py文件

怎么在python3中利用Socket實(shí)現(xiàn)通信

Client文件夾及其py文件

在Server文件夾下放一個(gè)或多個(gè)文件用于下載(我這里是4個(gè)不同類型的文件以供下文dir指令調(diào)用)

在Client文件下放一個(gè)或多個(gè)文件用于上傳(我這里是一個(gè)word文本)

2.在Server目錄下運(yùn)行server.py,等待客戶端發(fā)送連接請(qǐng)求:

怎么在python3中利用Socket實(shí)現(xiàn)通信

服務(wù)器端等待連接請(qǐng)求

3.在Client目錄下運(yùn)行client.py,向服務(wù)器端發(fā)送連接請(qǐng)求:

怎么在python3中利用Socket實(shí)現(xiàn)通信

客戶端發(fā)送請(qǐng)求 & 服務(wù)器端連接成功

注意:先啟動(dòng)服務(wù)器,再啟動(dòng)客戶端,這個(gè)為什么不用多說(shuō)吧?

4.在客戶端輸入“dir”指令,查看可下載目錄文件:

怎么在python3中利用Socket實(shí)現(xiàn)通信

“dir”指令

注:這里我用“\t“即制表符來(lái)控制顯示格式,但不知道為啥第一個(gè)文件后會(huì)自動(dòng)換行,暫且放著不去管它(不影響通信功能)

5.在客戶端輸入“get”指令,下載服務(wù)器中指定文件:

怎么在python3中利用Socket實(shí)現(xiàn)通信

“get 射頻仿真.pptx“指令

怎么在python3中利用Socket實(shí)現(xiàn)通信

“射頻仿真.pptx”下載成功

6.在客戶端輸入“put”指令,上傳指定文件到服務(wù)器:

怎么在python3中利用Socket實(shí)現(xiàn)通信

“put 天線15.doc”指令

怎么在python3中利用Socket實(shí)現(xiàn)通信

“天線15.doc”上傳成功

7.在客戶端輸入“close”指令,關(guān)閉連接,服務(wù)器進(jìn)入監(jiān)聽(tīng)狀態(tài):

怎么在python3中利用Socket實(shí)現(xiàn)通信

上述就是小編為大家分享的怎么在python3中利用Socket實(shí)現(xiàn)通信了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:怎么在python3中利用Socket實(shí)現(xiàn)通信-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://bm7419.com/article18/dpdsgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、企業(yè)建站微信小程序、全網(wǎng)營(yíng)銷推廣、面包屑導(dǎo)航動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管