1.执行CMD命令
SERVER: __author__ = 'Alex' #coding:utf-8 import socket import subprocess ip_port = ('127.0.0.1',8888) sk = socket.socket() sk.bind(ip_port) sk.listen(5) print ("服务端启动...") while True: conn,addr = sk.accept() while True: try: recv_data = conn.recv(1024) except Exception: break print (str(recv_data,"utf8")) cmd = str(recv_data,"utf8").strip() cmd_call = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE) print (type(cmd_call)) cmd_ret = cmd_call.stdout.read() print (type(cmd_ret)) print (len(cmd_ret)) if len(cmd_ret) == 0: cmd_ret = b'no output' conn.send(cmd_ret) conn.close() CLIENT: __author__ = 'Alex' #coding:utf-8 import socket ip_port = ('127.0.0.1',8888) sk = socket.socket() sk.connect(ip_port) print ("客户端启动...") while True: send_data = input(">>>>>").strip() if len(send_data) == 0: continue if send_data == 'q': break sk.sendall(bytes(send_data,'gbk')) recv_data = sk.recv(1024) print (str(recv_data,"gbk")) if send_data =="exit": break sk.close()
2.解决粘包问题,需要将传递过来的数据分成小块来接收
SERVER: __author__ = 'Alex' #coding:utf-8 import socket import subprocess ip_port = ('127.0.0.1',8899) sk = socket.socket() sk.bind(ip_port) sk.listen(5) print ("服务器启动...") while True: conn,addr = sk.accept() while True: recv_data = conn.recv(1024) print (str(recv_data,"utf8")) cmd = str(recv_data,"utf8") ret_cmd = subprocess.getoutput(cmd) ret_cmd_bytes = bytes(ret_cmd,"utf8") ret_size = len(ret_cmd_bytes) print (ret_size) conn.sendall(bytes(str(ret_size),"utf8")) conn.recv(1024) conn.sendall(bytes(ret_cmd,"utf8")) conn.close() CLIENT: __author__ = 'Alex' #coding:utf-8 import socket ip_port = ('127.0.0.1',8899) sk = socket.socket() sk.connect(ip_port) while True: send_data = input(">>>>>") sk.sendall(bytes(send_data,"utf8")) if send_data == 'exit': break recv_data = sk.recv(1024) recv_size = int(str(recv_data,"utf8")) print (recv_size) sk.send(bytes('ok','utf8')) cmd_received_size=0 #已经获取到的返回值结果的大小是多少 cmd_ret_bytes=bytes() #已经获取到的返回值的bytes类型结果 while cmd_received_size < recv_size: fetched_bytes = sk.recv(1024) cmd_received_size += len(fetched_bytes) cmd_ret_bytes += fetched_bytes cmd_result=str(cmd_ret_bytes,"utf8") print(cmd_result) sk.close()