這期內容當中小編將會給大家?guī)碛嘘P怎么在python3中利用Socket實現(xiàn)通信,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我們擁有十多年網(wǎng)頁設計和網(wǎng)站建設經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設計師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站建設、成都網(wǎng)站設計、微信開發(fā)、小程序制作、手機網(wǎng)站開發(fā)、成都h5網(wǎng)站建設、等業(yè)務。無論您有什么樣的網(wǎng)站設計或者設計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設計服務并滿足您的需求。服務器上socket編寫步驟:
1.調用socket函數(shù)創(chuàng)建socket對象,如:
socket_server = socket.socket(family,type)
family參數(shù)代表地址家族,可為AF_INET(Internet通信)或AF_UNIX(同一臺機器上進程間通信)。
type參數(shù)代表套接字類型,可為SOCK_STREAM(流套接字)和SOCK_DGRAM(數(shù)據(jù)報套接字)。
2.使用socket對象的bind方法,將socket綁定到指定地址,如:
socket_server.bind(address)
由AF_INET所創(chuàng)建的套接字,address必須是一組雙元素元組,格式為(host,port)。
3.使用socket對象的listen方法接受連接請求,如:
socket_server.listen(backlog)
backlog指定最多允許多少個客戶連接到服務器,至少為1,如果達到設定值,則拒絕接受新請求。
4.服務器套接字通過socket對象的accept方法等待客戶請求一個連接,如:
connection,address = socket_server.accept()
運行accept方法后,socket進入“waiting”狀態(tài),等待客戶請求連接。當客戶請求連接時,accept方法建立連接并返回服務器,返回一組含兩個元素的元組(connection,address)。 connection是新的socket對象,服務器必須通過這個新的對象與客戶端進行通信 ;address是客戶端的Internet地址。
5.處理階段,服務器和客戶端通過“send”和“recv”方法通信:
服務器調用send,并采用 二進制 形式向客戶發(fā)送信息。send方法返回已發(fā)送的字符個數(shù)。
服務器使用recv方法從客戶端接受信息,調用recv時,服務器必須指定一個整數(shù)來表示可通過本次方法調用來接受的大數(shù)據(jù)量。recv方法在接收數(shù)據(jù)時會進入“blocked”狀態(tài),最后返回一個字符串,它表示收到的數(shù)據(jù)。如果發(fā)送數(shù)據(jù)量超過recv所允許,數(shù)據(jù)會被截斷。多余的數(shù)據(jù)將緩沖到接收端。以后調用recv時,多余的數(shù)據(jù)會從緩沖區(qū)刪除。
6.傳輸結束,調用socket對象的close方法關閉連接,如:
connection.close() socket_server.close()
注意:這里先關閉accept創(chuàng)建的新socket(connection)然后關閉服務器端socket(socket_server)
客戶端上socket編寫步驟:
1.創(chuàng)建一個socket以連接服務器,如:
socket_client = socket.socket(family,type)
2.使用connect方法連接服務器,對于AF_INET而言鏈接格式如:
socket_client.connect((host,port))
host代表主服務器主機名或IP,port為服務器進程所綁定的端口號。
3.處理階段,客戶端和服務器端通過send與recv方法進行通信 4.傳輸結束,調用close方法關閉連接,如:
socket_client.close()
注意這里的socket_client是第一步創(chuàng)建的對象,而服務器端使用的是accept創(chuàng)建的新socket(connection)
關于TCP的三次握手建立連接和四次揮手斷開連接這里不做敘述(徹底講解我功夫不到家,不敢亂說),把圖轉來大家看一下(這個感覺很基礎, 但很重要):
三次握手
四次揮手
程序如下:
服務器端:
環(huán)境與服務器配置信息
接收文件方法
發(fā)送文件方法
處理命令1(接收、發(fā)送)方法
處理命令2(顯示可下載文件)方法
服務器端運行主體
客戶端:
環(huán)境與服務器配置
接收文件方法
發(fā)送文件方法
確認服務器端消息方法
處理命令1(接收、發(fā)送)方法
處理命令2(顯示可下載文件)方法
客戶端運行主體
運行說明:
1.首先建立server.py和client.py文件,并分別置于兩個不同的位置,如圖:
Server文件夾及其py文件
Client文件夾及其py文件
在Server文件夾下放一個或多個文件用于下載(我這里是4個不同類型的文件以供下文dir指令調用)
在Client文件下放一個或多個文件用于上傳(我這里是一個word文本)
2.在Server目錄下運行server.py,等待客戶端發(fā)送連接請求:
服務器端等待連接請求
3.在Client目錄下運行client.py,向服務器端發(fā)送連接請求:
客戶端發(fā)送請求 & 服務器端連接成功
注意:先啟動服務器,再啟動客戶端,這個為什么不用多說吧?
4.在客戶端輸入“dir”指令,查看可下載目錄文件:
“dir”指令
注:這里我用“\t“即制表符來控制顯示格式,但不知道為啥第一個文件后會自動換行,暫且放著不去管它(不影響通信功能)
5.在客戶端輸入“get”指令,下載服務器中指定文件:
“get 射頻仿真.pptx“指令
“射頻仿真.pptx”下載成功
6.在客戶端輸入“put”指令,上傳指定文件到服務器:
“put 天線15.doc”指令
“天線15.doc”上傳成功
7.在客戶端輸入“close”指令,關閉連接,服務器進入監(jiān)聽狀態(tài):
上述就是小編為大家分享的怎么在python3中利用Socket實現(xiàn)通信了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文名稱:怎么在python3中利用Socket實現(xiàn)通信-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/article18/dpdsgp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、企業(yè)建站、微信小程序、全網(wǎng)營銷推廣、面包屑導航、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)