日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python网络编程内容_Python网络编程

發布時間:2024/7/5 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python网络编程内容_Python网络编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文要寫的內容也稱為Python套接字編程,并簡單介紹socketserver類。參考教程主要是《Python核心編程》。

首先,客戶端/服務器模型,客戶端向服務器發送請求,在請求合理的情況下,服務器返回客戶端需要的資源,這是此架構下的通信方式。

套接字:套接字是計算機網絡的數據結構,體現了通信端點的概念。在開始任何類型的通信之前,網絡應用必須創建套接字。可以將套接字比作電話插口,沒有它將無法進行通信。AF_INET 網絡套接字 是目前使用最廣泛的套接字。

套接字地址:一個網絡地址由主機-端口 對來組成;可以將套接字比作電話插口,那么主機名和 端口號就像是區號與電話號碼的組合。

PS:有效端口號范圍為0~65535,小于1024的端口號預留給了系統。

套接字分為面向連接的套接字和無連接的套接字

面向連接的通信提供序列化的,可靠的和不重復的數據交付,而沒有邊界記錄,這基本上意味著每條消息可以拆分成很多片段,并且每一條消息片段都確保能夠達到目的地,然后將它們按順序組合在一起,最后加將完整消息傳遞給正在等待的應用程序。

實現這種連接類型的主要協議是傳輸控制協議 TCP。創建TCP套接字,必須使用SOCK_STREAM作為套接字類型。

實例:

創建TCP服務器偽代碼如下:

sock = socket() #創建套接字

sock.bind() #將套接字與地址綁定

sock.listen() #監聽連接

loop: #服務器無限循環

csock = sock.accept() #接受客戶端連接

loop: #通信循環

cs.recv()/cs.send() #接收發送數據

cs.close() #關閉客戶端套接字

ss.close() #關閉服務器套接字

服務器示例代碼如下:

客戶端代碼示例如下:

無連接套接字是數據報類型的套接字,這意味著,在通信開始之前不需要建立連接。所以,在數據傳輸過程中并無法保證它的順序性,可靠性或重復性,而且還可能丟失信息。但它的優勢也是明顯的,比如開銷小,“成本低廉”。實現這種無連接類型的主要協議是用戶數據報協議UDP。必須使用SOCK_DGRAM作為套接字類型

創建UDP服務器的偽代碼如下:

sock.socket() #創建通信套接字

sock.bind() #將套接字與地址綁定

loop: #服務器無限循環

csock = sock.recvfrom()/sock.sendto() #接收發送數據

sock.close() #關閉服務器套接字

示例代碼如下:

socketserver模塊簡單介紹

這個模塊的不同之處在于,我們使用類來編寫應用程序。因為以面向對象的方式處理事物有助于組織數據,以及邏輯性地將功能放在正確的地方。應用程序是事件驅動的,這意味著只有在系統中的事件發生時,它們才會工作。

socketserver模塊有4個具體的類

class socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True):使用TCP協議

class socketserver.UDPServer(server_address, RequestHandlerClass, bind_and_activate=True):使用UDP協議

class socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True):只使用在UNIX平臺上

class socketserver.UnixDatagramServer(server_address, RequestHandlerClass, bind_and_activate=True):只使用在UNIX平臺上

這4個類的繼承關系如下:

這四個類是同步處理請求的,每一個請求必須在前一個請求完成后再開始。所以如果每個請求都花費大量的時間的話,因為需要進行大量計算,那么它們是不合適的。解決方案就是創建一個分開的進程或者線程去處理每個請求,ForkingMixIn和ThreadingMixIn混入類可以用作支持異步行為。

創建一個服務器需要以下幾步,首先,必須創建一個請求處理request handler類通過繼承BaseRequestHandler類并且重寫handler()方法。該方法將會處理進來的請求,第二步,必須繼承server類中的一個,并且將它和request handler類一起傳遞到服務器地址。然后調用服務器的handle_request()或者serve_forever()方法去處理一個或多個請求。最后調用server_close()關掉套接字

socketserver.BaseServer類是此模塊中服務器對象的超類,本身并不直接生成實例,而是通過派生關系,讓子類生產實例,它的子類,比如TCPServer,UDPServer。

請求處理對象

socketserver.BaseQequestHandler是超類,每個子類都必須定義一個新的handle()方法,它的兩個子類,StreamQequestHandler和DatagramQequestHandler.

示例代碼也就是python docs上的代碼:

需要注意的是,此片文章中,tcp的代碼調試通過了,udp和socketserver的代碼調試未通過,后續再努力

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python网络编程内容_Python网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。