python使用tcp socket 传输文件-服务端,客户端

1.文件接收-服务端python

#_*_coding:utf-8_*_
# !/etc/bin/env python2.7
#coded by wangjd@2017
#socket file server
import socket
import SocketServer
import struct
import os
#导入外部插件
#定义服务器,地址,端口
address=("",9999)
#(ip,port)
class MyRequestHandler(SocketServer.BaseRequestHandler):
    #继承SocketServer请求处理的类
    def handle(self):
        #重写handle方法
        print("connect from :",self.client_address)
        # 打印客户端链接的IP
        while True:
            #没有报错执行
            fileinfo_size=struct.calcsize('128sl')
            #定义文件信息,文件名为128bytes长度
            self.buf=self.request.recv(fileinfo_size)
            #接受的是客户端发送过来的头部信息
            if self.buf:
                self.filename,self.filesize=struct.unpack('128sl',self.buf)
                #解包获得文件名和文件大小
                print("filename and size:",self.filename,self.filesize)
                self.filename=os.path.join('/home/wangjd/Desktop/','new'+self.filename.strip('\00'))
                #从新处理文件名,使用trip删除打包时候的多余空字符
                recvd_size=0
                #初始化接受了的文件大小
                file=open(self.filename,'wb')
                #打开文件
                print("start recv data..")
                while not recvd_size==self.filesize:
                    #当没接收完时候执行
                    if self.filesize -recvd_size > 1024:
                        rdata=self.request.recv(1024)
                        recvd_size+=len(rdata)
                        #叠加大小
                    else:
                        rdata=self.request.recv(self.filesize-recvd_size)
                        recvd_size=self.filesize
                    file.write(rdata)
                    #写入
                file.close()
                #关闭文件
                SocketServer
                print('data.....finish')
if __name__ == '__main__':
        tcpSever=SocketServer.ThreadingTCPServer(address,MyRequestHandler)
        print('waiting...')
        tcpSever.serve_forever()
        #保持

2.文件发送-客户端web

#_*_coding:utf-8_*_
# !/etc/bin/env python2.7
#coded by wangjd@2017
#file clients
import socket
import time
import struct
import os
#导入外部插件
#定义客户端,地址
sc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#实例化socket
address=('127.0.0.1',9999)
#定义address
sc.connect(address)
#发起链接
while True:
    file_path="/home/wangjd/Desktop/test.txt"
    #定义要传输的文件地址
    file_info_size=struct.calcsize('128sl')
    #定义打包规则
    fhead=struct.pack('128sl',os.path.basename(file_path),os.stat(file_path).st_size)
    #定义头信息
    sc.send(fhead)
    #首先发送头部信息
    print("send file:",file_path)
    #打印文件信息
    if True:
        #一切正常,开始处理文件
        fo=open(file_path, 'rb')
        fileData=fo.read(1024)
        #读取文件数据,1024切分
        if not fileData:
            break
            #文件为空break
        else:
             sc.send(fileData)
            #发送数据,1024切分的数据
        fo.close()
        #发送结束,关闭文件。
        print("finish send..")
    sc.close()
    exit()