您的位置:首页 > 编程语言 > Python开发

python socket 实现远程执行命令 上传 下载文件

2013-07-19 18:20 1301 查看
client端:

#!/usr/bin/env python
import socket,time,os
import rlcompleter
h,p="192.168.220.130",12346
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((h,p))
def runcmd():
received=sock.recv(8192)
if received=="changed directoy successful":
print "changed directoy successful"
else:
print received
def putfile(filename):
print "\033[32;1mstart send %s\033[0m" %filename
f=open(filename,'rb')
while 1:
f_data=f.read(4096)
if not f_data:break
sock.sendall(f_data)
f.close()
time.sleep(0.5)
sock.sendall("completed")
print "send %s completed" %filename
def getfile(filename):
print "\033[32;1mstart get %s\033[0m" %filename
os.chdir(dir)
f=open(filename,'wb')
while 1:
data=sock.recv(8192)
if not data:break
if data=="completed":
time.sleep(0.5)
print "%s have get complete" %filename
break
f.write(data)
f.close()
while 1:
try:
cmd=raw_input("\033[32;1mPlease input will run command: \033[0m")
sock.sendall(cmd)
action=sock.recv(4096)
if action=="Has ready" and cmd.split()[0]=="put":
global dir
dir,filename=os.path.split(cmd.split()[1])
os.chdir(dir)
putfile(filename)
elif  action=="Has ready" and cmd.split()[0]=="get":
dir,filename=os.path.split(cmd.split()[1])
getfile(filename)
#   action=="Has ready" and cmd.split()[0] != "get" and cmd.split()[0] != "put":
else:
runcmd()
except KeyboardInterrupt:
print "\n\033[31;1mbye bye!\033[0m"
break
sock.close()
server端:
#!/usr/bin/python
#coding=utf-8
import SocketServer
import os,time
class myserver(SocketServer.BaseRequestHandler):
def runcmd(self,comm):
print "\033[33;1mwill run  %s on %s\033[0m" %(comm,self.client_address[0])
self.request.sendall("Has ready")
if comm.split()[0]=="cd":
os.chdir(comm.split()[1])
self.request.sendall("changed directoy successful")
else:
cmd=os.popen(comm)
result=cmd.read()
result_data="\n\033[35;1mFeedback from Server \n\033[0m" + result
self.request.sendall(result_data)
def handle(self):
print "\033[32;1m connected from %s\033[0m" %self.client_address[0]
while 1:
#           print "\033[32;1m connected from %s\033[0m" %self.client_address[0]
try:
data=self.request.recv(4096)
#               filepath=data.split()[1]
#               dir=('/').join(filepath.split('/')[:-1])
if data.split()[0]=="put":
global dir
dir,filename=os.path.split(data.split()[1])
self.recvfile(filename)
elif data.split()[0]=="get":
dir,filename=os.path.split(data.split()[1])
self.sendfile(filename)
else:
self.runcmd(data)
except IndexError:
print "exit", self.client_address
break

def recvfile(self,filename):
print "\033[32;1mstart receive %s...\033[0m" %filename
self.request.sendall("Has ready")
os.chdir(dir)
f=open(filename,'wb')
while 1:
data=self.request.recv(4096)
if not data:break
if data=="completed":
print "%s have received complete" %filename
break
f.write(data)
f.close()
def sendfile(self,filename):
print "\033[32;1mstart send %s...\033[0m" %filename
os.chdir(dir)
f=open(filename,'rb')
self.request.sendall("Has ready")
time.sleep(0.5)
while 1:
f_data=f.read(8192)
if not f_data:break
self.request.sendall(f_data)
f.close()
time.sleep(0.5)
self.request.sendall("completed")
print "send %s completed" %filename
if __name__=="__main__":
h,p='',12346
server=SocketServer.ThreadingTCPServer((h,p),myserver)
server.serve_forever()
server.shutdown()
运行截图:







本文出自 “四叶草的空间” 博客,请务必保留此出处http://wsq68.blog.51cto.com/2394336/1252842
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐