每日作业:4/20
1、
方法一:
服务端:os.popen
import socket import os iphone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) iphone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) iphone.bind(("127.0.0.1",9000)) iphone.listen(5) while True: conn,addr=iphone.accept() print('接到来自%s的电话' % addr[0]) while True: try: cmd=conn.recv(1024) if not cmd: print("客户端:{} 已经关闭连接".format(addr[0])) break print("客户端命令:{}".format(cmd.decode("utf-8"))) cmd_stat=os.system(cmd.decode("utf-8")) # print(cmd_stat) if not cmd_stat: cmd_data=os.popen(cmd.decode("utf-8")).read() conn.send(cmd_data.encode("utf-8")) else: conn.send("命令不存在".encode("utf-8")) except Exception: print("客户端:{} 非正常关闭连接".format(addr[0])) break conn.close() iphone.close()
客户端:
import socket iphone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) iphone.connect(("127.0.0.1",9000)) while True: msg=input("请输入命令:>>>").strip() if len(msg) == 0: continue if msg == "exit()": iphone.close() break else: iphone.send(msg.encode("utf-8")) data=iphone.recv(1024) print(data.decode("utf-8")) iphone.close()
方法二:(不存在的命令)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import socket import subprocess phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.bind(("127.0.0.1",9000)) phone.listen(5) #循环连接 while True: conn,addr=phone.accept() # print(conn,addr) #循环通信 while True: try: cmd=conn.recv(1024) if not cmd: print("客户端:{} 已经断开连接".format(addr[0])) break print("命令名称:%s" %cmd.decode("utf-8"),) obj = subprocess.Popen(cmd.decode("utf-8"), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) obj.wait() cmd_stat=subprocess.Popen.poll(obj) if not cmd_stat: cmd_data = obj.stdout.read() if not cmd_data:conn.send("命令:{} 执行成功".format(cmd.decode("utf-8")).encode("gbk")) print(cmd_data.decode("gbk")) conn.send(cmd_data) else: err_data = obj.stderr.read() conn.send(err_data) except Exception: print("客户端:{} 非正常退出".format(addr[0])) break conn.close() phone.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.connect(("127.0.0.1",9000)) #循环通信 while True: cmd=input("请输入命令:>>>").strip() if not cmd:continue if cmd == "exit()": phone.close() break phone.send(cmd.encode("utf-8")) cmd_data=phone.recv(1024) print(cmd_data.decode("gbk")) phone.close()