通過上下文管理器編寫物件導向tcp

2021-08-14 08:30:54 字數 1584 閱讀 1843

對於系統資源如檔案、資料庫連線、socket而言,應用程式開啟這些資源並執行完業務邏輯之後,必須做的一件事就是要關閉(斷開)該資源。

在python中開啟過多的檔案書寫完成後沒有及時關掉就會出現,too many open files" 的錯誤,因為系統允許你開啟的最大檔案數量是有限的。

例如:在建立tcp和udp是用到的套接字,在程式執行結束後應該及時關掉

下面是利用上下文管理器通過物件導向來書寫tcp,自動關閉套接字.

上下文管理器:任何實現了 __enter__() 和 __exit__() 方法的物件都可稱之為上下文管理器,上下文管理器物件可以使用 with 關鍵字。

# 客戶端

import socket

class client(object):

def __init__(self,ip,dk):

self.ip = ip

self.dk = dk

def __enter__(self):

self.tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)

self.tcp_socket.connect((self.ip,self.dk))

send_mag = input('請輸入資訊:')

self.tcp_socket.send(send_mag.encode())

data = self.tcp_socket.recv(1024)

print(data.decode('gbk'))

def __exit__(self, *args):

self.tcp_socket.close()

if __name__ == '__main__':

with client('192.168.90.22', 8080) astcp_socket:

print("就好哈")

# 伺服器

import  socket

class server(object):

def __init__(self):

self.tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)

self.tcp_socket.bind(('',8888))

self.tcp_socket.listen(128)

def __enter__(self):

self.client_socket, address= self.tcp_socket.accept()

data = self.client_socket.recv(1024)

print(data.decode('gbk'))

mag = input('資訊:')

self.client_socket.send(mag.encode())

def __exit__(self, *args):

self.client_socket.close()

self.tcp_socket.close()

with server() as client_socket:

print('完成!!!....')

with上下文管理器

在執行 with 語句時,首先執行 with 後面的 open 執行完 後,會將 的結果通過 as 儲存到 f 中 然後在下面實現真正要執行的操作 在操作後面,並不需要寫檔案的關閉操作,檔案會在使用完後自動關閉 實際上,在檔案操作時,並不是不需要寫檔案的關閉,而是檔案的關閉操作在 with 的上下文...

with上下文管理器

上下文管理器 任何實現了enter 和exit 法的物件都可稱之為上下 管理 器,上下 管理器物件可以使 with 關鍵字。顯然,件 file 物件也實現 了上下 管理器 方法一class file def init self,filename,mode self.filename filename...

上下文管理器

今天我們聊聊上下文管理器,當然今天所談僅為個人觀點!今天如果不是學生面試回來跟我聊到了上下文管理器,我都忘了python中還有這麼個鬼了。特別寫一篇博文我們簡單聊聊。普通的檔案操作方式,例如 情況01 1 以寫的方式開啟檔案 f open 1.txt w 2 寫入檔案內容 f.write hello...