Linux培训
达内IT学院
400-996-5531
用python的socket模块实现的一个很简单的文件传输功能,不懂怎么写比较科学优雅,求各路大神指导
服务端:
#!/usr/bin/python #coding:utf-8 import SocketServer import subprocess import string import time class MyTcpServer(SocketServer.BaseRequestHandler): def recvfile(self, filename): print "starting reve file!" f = open(filename, 'wb') self.request.send('ready') while True: data = self.request.recv(4096) if data == 'EOF': print "recv file success!" break f.write(data) f.close() def sendfile(self, filename): print "starting send file!" self.request.send('ready') time.sleep(1) f = open(filename, 'rb') while True: data = f.read(4096) if not data: break self.request.send(data) f.close() time.sleep(1) self.request.send('EOF') print "send file success!" def handle(self): print "get connection from :",self.client_address while True: try: data = self.request.recv(4096) print "get data:", data if not data: print "break the connection!" break else: action, filename = data.split() if action == "put": self.recvfile(filename) elif action == 'get': self.sendfile(filename) else: print "get error!" continue except Exception,e: print "get error at:",e if __name__ == "__main__": host = '' port = 60000 s = SocketServer.ThreadingTCPServer((host,port), MyTcpServer) s.serve_forever()客户端:
#!/usr/bin/python #coding:utf-8 import socket import sys import time ip = '192.168.1.214' port = 60000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) def recvfile(filename): print "server ready, now client rece file~~" f = open(filename, 'wb') while True: data = s.recv(4096) if data == 'EOF': print "recv file success!" break f.write(data) f.close() def sendfile(filename): print "server ready, now client sending file~~" f = open(filename, 'rb') while True: data = f.read(4096) if not data: break s.sendall(data) f.close() time.sleep(1) s.sendall('EOF') print "send file success!" def confirm(s, client_command): s.send(client_command) data = s.recv(4096) if data == 'ready': return True try: s.connect((ip,port)) while 1: client_command = raw_input(">>") if not client_command: continue action, filename = client_command.split() if action == 'put': if confirm(s, client_command): sendfile(filename) else: print "server get error!" elif action == 'get': if confirm(s, client_command): recvfile(filename) else: print "server get error!" else: print "command error!" except socket.error,e: print "get error as",e finally: s.close()执行效果
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved