您的位置:首页 > 其它

实现一个简单的多线程数据传输和文件传输

2014-09-29 21:24 513 查看
服务器端:

#!/usr/bin/env python
#conding=utf-8

import SocketServer
import commands
import time

class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv(1024).strip()
if not self.data:
break

print self.data
user_input = self.data.split()
if user_input[0] == 'get':
with open(user_input[1],'rb') as f:
self.request.sendall(f.read())
time.sleep(0.5)
self.request.send('FileTransferDone')
continue

cmd_status,result = commands.getstatusoutput(self.data)
if len(result.strip()) != 0:
self.request.sendall(result)
else:
self.request.sendall("Done")

if __name__ == "__main__":
host,port = "localhost",9991
server = SocketServer.ThreadingTCPServer((host,port), MyTCPHandler)
server.serve_forever()


客户端:

#!/usr/bin/env python
#coding=utf-8
import socket
import time
import os

c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

c.connect(('127.0.0.1', 9991))

while True:
cmd = raw_input()
if len(cmd) == 0:
continue
c.send(cmd)

if cmd.split()[0] == 'get':
pathstr = cmd.split()[1]
(dirstr,filestr) = os.path.split(pathstr)
s = os.getcwd()
newstr = os.path.join(s , filestr)

with open(newstr, 'wb') as f:
while 1:
data = c.recv(1024)
if data == "FileTransferDone":
break
f.write(data)
else:
print c.recv(1024)
#	time.sleep(2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: