Linux培训
达内IT学院

400-111-8989

Python socket实现文件传输的服务端与客户端

  • 发布:Linux培训
  • 来源:网络
  • 时间:2015-07-09 11:04

用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()  
执行效果

执行效果

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:Python实现十六进制与十进制
下一篇:3个开源的 Python Shell
  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省