1 import importlib 2 3 __import__('import_lib.metaclass') #這是解釋器本身內部用的 4 #importlib.import_module('import_lib.metaclass') #與上面這句效果同樣,官方建議用這個
assert type(obj.name) is int服務器
print(obj.name/2)併發
也就是判斷是否符合標準,不符合的話,程序就會中止運行,例如:在銀行的轉帳系統中,遇到問題,就會馬上中止!ssh
服務端:socket
1 import socket 2 Server= socket.socket(AF_INET,SOCK_STREAM) 3 Server.bind('localhost',9999) 4 Server.listen(10) 5 6 while True:#重複鏈接 7 conn,addr = Server.accept() #阻塞 8 while True:#屢次發送信息 9 print("new conn",addr) 10 data = conn.recv(1024) #最大8192 recv默認是阻塞的,客戶端不發,就一直處於此處 11 if not data: 12 break #客戶端斷開,conn.recv收到的都是空數據 13 print(data) 14 conn.send(data.upper())
客戶端:ide
1 import socket 2 client = socket.socket() 3 client.connect(serverip,9999) #鏈接服務器 4 client.send(data)#發送數據 5 client.recv(data)#接受數據
1 import socket,os 2 3 server = socket.socket() 4 server.bind(('localhost',999)) 5 6 server.listen(10) 7 8 while True: 9 conn,addr = server.accept() 10 print("new conn:",addr) 11 while True: 12 data = conn.recv(1024) 13 if not data: 14 print("客戶端已經斷開") 15 break 16 print("執行指令:",data) 17 cmd_res = os.popen(data.decode()).read() 18 conn.send( str(len(cmd_res.encode())).encode("utf-8") )#先發大小給客戶端 19 conn.send(cmd_res.encode("utf-8"))
1 import socket 2 3 client = socket.socket() 4 5 client.connect(('localhost',999)) 6 while True: 7 cmd = input(">>:").strip() 8 if len(cmd) ==0:continue 9 client.send(cmd.encode("utf-8")) 10 cmd_res_size = client.recv(1024) #接受命令結果的長度 11 print("命令的長度:",cmd_res_size) 12 received_size = 0 13 #receiced_data = b'' 14 while received_size<int(cmd_res_size.decode()): 15 16 data = client.recv(1024) 17 received_size+=len(data)#每次收到的可能小於1024 18 #print(data.decode()) 19 print(received_size) 20 else: 21 print("data done")
光只是簡單的發消息、收消息沒意思,乾點正事,能夠作一個極簡版的ssh,就是客戶端鏈接上服務器後,讓服務器執行命令,並返回結果給客戶端。spa
ftp server:code
讀取文件名>>檢測文件是否存在>>打開文件>>檢測文件大小>>發送文件大小和md5給客戶端>>等客戶端確認>>開始邊讀邊發送數據>>發送md5,視頻
視頻8.7 8.8回頭從新看 server
實現併發處理blog
步驟:1.必須建立一個請求處理類,而且這個類要繼承BaseRequestHandler,而且還有重寫父類中的hangle方法
2.必需要實例化一個TCPsever,而且傳遞server IP和上面常見的請求處理類,給這個實例化的TCPserver
3.server.serve_forever() #處理多個請求,永遠執行
4.call server_close() to close the socket