SOCKET編程進階
技術文章第一時間送達!
socketserver
雖說用Python編寫簡單的網路程序很方便,但複雜一點的網路程序還是用現成的框架比較好。這樣就可以專心事務邏輯,而不是套接字的各種細節。SocketServer模塊簡化了編寫網路服務程序的任務。同時SocketServer模塊也是Python標準庫中很多伺服器框架的基礎。
socketserver模塊可以簡化網路伺服器的編寫,Python把網路服務抽象成兩個主要的類,一個是Server類,用於處理連接相關的網路操作,另外一個則是RequestHandler類,用於處理數據相關的操作。並且提供兩個MixIn 類,用於擴展 Server,實現多進程或多線程。
Server類
它包含了種五種server類,BaseServer(不直接對外服務)。TCPServer使用TCP協議,UDPServer使用UDP協議,還有兩個不常使用的,即UnixStreamServer和UnixDatagramServer,這兩個類僅僅在unix環境下有用(AF_unix)。
創建一個socketserver 至少分以下幾步
1.首先,您必須創建一個請求處理類,繼承BaseRequestHandlerclass類並且重 寫父類的handle()方法,該方法將處理傳入的請求。
2.其次,你必須實例化一個上面類型中的一個類(如TCPServer)傳遞伺服器的地址和你上面創建的請求處理類 給這個TCPServer。
3.然後,調用handle_request()或者serve_forever()方法來處理一個或多個請求。
4.最後,調用server_close()關閉socket。
聊天並發實例
解決大數據傳送和粘包問題
粘包:相鄰兩次發送的數據粘在了一起
文件上傳
注意:
1 紙條就是conn
2 一收一發(解決粘包的關鍵)
3 client_data=conn.recv(1024)
if 那邊send一個空數據 這邊recv為空,則recv繼續阻塞,等待其他的數據。所以聊天的時候好好聊,別發空數據。
TAG:python寶典 |