@2020-4-20 作業: 1、編寫遠程執行命令的CS架構軟體 # 服務端 # _*_coding:utf-8_*_ __author__ = 'cc' from socket import * import subprocess ip_port = ('127.0.0.1', 1080) buf ...
@2020-4-20
作業:
1、編寫遠程執行命令的CS架構軟體
# 服務端 # _*_coding:utf-8_*_ __author__ = 'cc' from socket import * import subprocess ip_port = ('127.0.0.1', 1080) bufsize = 1024 udp_server = socket(AF_INET, SOCK_DGRAM) udp_server.bind(ip_port) while True: # 收消息 cmd, addr = udp_server.recvfrom(bufsize) print('用戶命令----->', cmd) # 邏輯處理 res = subprocess.Popen(cmd.decode('utf-8'), shell=True, stderr=subprocess.PIPE, stdin=subprocess.PIPE, stdout=subprocess.PIPE) stderr = res.stderr.read() stdout = res.stdout.read() # 發消息 udp_server.sendto(stderr, addr) udp_server.sendto(stdout, addr) udp_server.close()服務端
# 客戶端 from socket import * ip_port = ('127.0.0.1', 1080) bufsize = 1024 udp_client = socket(AF_INET, SOCK_DGRAM) while True: msg = input('>>: ').strip() udp_client.sendto(msg.encode('utf-8'), ip_port) data, addr = udp_client.recvfrom(bufsize) print(data.decode('utf-8'), end='')客戶端
2、加上通信迴圈與鏈接迴圈之後的tcp通信代碼
#_*_coding:utf-8_*_ __author__ = 'Linhaifeng' import socket ip_port=('127.0.0.1',8081)#電話卡 BUFSIZE=1024 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #買手機 s.bind(ip_port) #手機插卡 s.listen(5) #手機待機 while True: #新增接收鏈接迴圈,可以不停的接電話 conn,addr=s.accept() #手機接電話 # print(conn) # print(addr) print('接到來自%s的電話' %addr[0]) while True: #新增通信迴圈,可以不斷的通信,收發消息 msg=conn.recv(BUFSIZE) #聽消息,聽話 # if len(msg) == 0:break #如果不加,那麼正在鏈接的客戶端突然斷開,recv便不再阻塞,死迴圈發生 print(msg,type(msg)) conn.send(msg.upper()) #發消息,說話 conn.close() #掛電話 s.close() #手機關機服務端-升級版
#_*_coding:utf-8_*_ __author__ = 'Linhaifeng' import socket ip_port=('127.0.0.1',8081) BUFSIZE=1024 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect_ex(ip_port) #撥電話 while True: #新增通信迴圈,客戶端可以不斷發收消息 msg=input('>>: ').strip() if len(msg) == 0:continue s.send(msg.encode('utf-8')) #發消息,說話(只能發送位元組類型) feedback=s.recv(BUFSIZE) #收消息,聽話 print(feedback.decode('utf-8')) s.close() #掛電話客戶端-升級版