欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3利用Socket實現(xiàn)通信的方法示例

 更新時間:2019年05月06日 11:39:11   作者:木魚不下水  
這篇文章主要介紹了python3利用Socket實現(xiàn)通信的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

參考于: python cs架構實現(xiàn)簡單文件傳輸

原文中程序運行有誤,在此做修改與解釋,如下: 功能說明:

共2個py文件分別為server和client端,采用socket進行通信。提供兩種功能:“dir“ 命令用于顯示服務器端可下載文件名;“get/put+文件名“ 命令用于與服務器端進行下載或發(fā)送數(shù)據(jù)交換。

Socket解釋

服務器上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):

“close”指令

注意幾點:

1.send方法的第一個參數(shù)是二進制數(shù)據(jù),使用bytes(字符串,encoding='utf-8')將字符串改為二進制進行發(fā)送

2.在做指令判斷的時候,需要將“get”、“put”等指令轉為二進制,才能與接收到的指令進行判斷,這里不將二進制轉為字符串(這樣易于理解)的原因是,我沒找到一個簡單的方法讓二進制轉str(我不會)

3.理清楚創(chuàng)建流程后,主要的困難就是轉換數(shù)據(jù)格式,哪里需要轉哪里不需要,自己寫一遍,再debug一會兒就會弄明白了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python生成器和yield關鍵字(完整代碼)

    python生成器和yield關鍵字(完整代碼)

    這篇文章主要介紹了python生成器和yield關鍵字,文章主要附上完整的代碼及些許的解釋說明,需要的小伙伴可以參考一下
    2022-01-01
  • python實現(xiàn)兩個經緯度點之間的距離和方位角的方法

    python實現(xiàn)兩個經緯度點之間的距離和方位角的方法

    今天小編就為大家分享一篇python實現(xiàn)兩個經緯度點之間的距離和方位角的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python matplotlib可視化繪圖詳解

    Python matplotlib可視化繪圖詳解

    這篇文章主要介紹了Python matplotlib繪圖可視化知識點整理(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09
  • python使用ctypes調用第三方庫時出現(xiàn)undefined?symbol錯誤詳解

    python使用ctypes調用第三方庫時出現(xiàn)undefined?symbol錯誤詳解

    python中時間的庫有time和datetime,pandas也有提供相應的時間處理函數(shù),下面這篇文章主要給大家介紹了關于python使用ctypes調用第三方庫時出現(xiàn)undefined?symbol錯誤的相關資料,需要的朋友可以參考下
    2023-02-02
  • Python中的yeild關鍵字提高代碼執(zhí)行效率場景實例探究

    Python中的yeild關鍵字提高代碼執(zhí)行效率場景實例探究

    在Python編程語言中,yeild是一個非常實用的關鍵字,它不僅可以幫助你編寫更加簡潔的代碼,還可以提高代碼的執(zhí)行效率,本文將詳細介紹yeild在Python中的使用方法,并通過示例代碼進行演示,讓我們一起來探索這個強大的關鍵字吧
    2024-01-01
  • Python?Excel操作從零學習掌握openpyxl用法

    Python?Excel操作從零學習掌握openpyxl用法

    這篇文章主要為大家介紹了Python?Excel操作從零學習掌握openpyxl用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 詳解python調度框架APScheduler使用

    詳解python調度框架APScheduler使用

    本篇文章主要介紹了詳解python調度框架APScheduler使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Python使用回溯法子集樹模板獲取最長公共子序列(LCS)的方法

    Python使用回溯法子集樹模板獲取最長公共子序列(LCS)的方法

    這篇文章主要介紹了Python使用回溯法子集樹模板獲取最長公共子序列(LCS)的方法,簡單描述了最長公共子序列問題并結合實例形式分析了Python基于回溯法子集樹模板獲取最長公共子序列的操作步驟與相關注意事項,需要的朋友可以參考下
    2017-09-09
  • python實現(xiàn)的分層隨機抽樣案例

    python實現(xiàn)的分層隨機抽樣案例

    這篇文章主要介紹了python實現(xiàn)的分層隨機抽樣案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • PyTorch中torch.utils.data.DataLoader實例詳解

    PyTorch中torch.utils.data.DataLoader實例詳解

    torch.utils.data.DataLoader主要是對數(shù)據(jù)進行batch的劃分,下面這篇文章主要給大家介紹了關于PyTorch中torch.utils.data.DataLoader的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09

最新評論