Maison > Article > développement back-end > socket d'apprentissage python ---ssh
Écrivez une version simplifiée de ssh en utilisant Scoket
Serveur :
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 5 import socket,os 6 7 s=socket.socket()#实例化一个 socket 8 9 s.bind(('localhost',9100))#绑定一个监听端口10 11 s.listen(5)#监听列表 5 个12 print('监听中...')13 while True:14 conn,addr=s.accept()#监听到新的接连15 print('连接到新的地址:',addr)16 while True:17 data=conn.recv(4092)#接收数据18 if not data:#如果收的数据为空19 print('客户端已经断开!')20 break21 print('指令:',data.decode())22 cmd_res=os.popen(data.decode()).read()#读取数据,指令23 #cmd_res_l=len(cmd_res.encode('utf-8'))#数据大小24 25 if len(cmd_res)==0:26 cmd_res='指令错误!'27 continue28 #conn.recv(1)29 conn.send(str(len(cmd_res.encode('utf-8'))).encode('utf-8') )#发送数据的大小30 #print(len(cmd_res))31 clinet_ack=conn.recv(1024)#为了去粘包32 33 conn.send(cmd_res.encode('utf-8'))#发送指令34 #print(cmd_res.encode('utf-8'))35 print('发送完毕!')36 else:37 s.close()
Client :
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import socket 5 c=socket.socket()#实例化一个socket 6 7 c.connect(('localhost',9100))#客户端连联 8 while True: 9 cho=input('指令:').strip()10 if len(cho)==0:continue11 c.send(cho.encode('utf-8'))#发送数据12 cmd_res_size=c.recv(1024)#接收数据 数据大小13 print('数据大小:',cmd_res_size)14 size_l=0#收数据当前大小15 c.send('确认!'.encode('utf-8'))#为了去粘包16 while size_l< int(cmd_res_size.decode()):17 data=c.recv(1024)#开始接收数据18 size_l+=len(data)#加上19 print(data.decode())20 print(size_l)21 else:22 print('接收完毕',size_l)
Sous win10, la commande ipconfig générera une erreur lorsque recv(1024), et les autres commandes ne sont pas encore trouvées
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!