Socket通訊模塊

動態導入模塊

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:

服務端: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)#接受數據

5.經過socket實現簡單的ssh

 

 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"))
View Code

 

 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")
View Code

光只是簡單的發消息、收消息沒意思,乾點正事,能夠作一個極簡版的ssh,就是客戶端鏈接上服務器後,讓服務器執行命令,並返回結果給客戶端。spa

 6.經過socket發送文件

ftp server:code

讀取文件名>>檢測文件是否存在>>打開文件>>檢測文件大小>>發送文件大小和md5給客戶端>>等客戶端確認>>開始邊讀邊發送數據>>發送md5,視頻

視頻8.7  8.8回頭從新看      server

7.SocketServer

實現併發處理blog

步驟:1.必須建立一個請求處理類,而且這個類要繼承BaseRequestHandler,而且還有重寫父類中的hangle方法

        2.必需要實例化一個TCPsever,而且傳遞server IP和上面常見的請求處理類,給這個實例化的TCPserver

        3.server.serve_forever()  #處理多個請求,永遠執行

        4.call server_close() to close the socket

相關文章
相關標籤/搜索