900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python发送文件_Python大文件传输

python发送文件_Python大文件传输

时间:2022-10-23 17:43:02

相关推荐

python发送文件_Python大文件传输

socker_server.py:

实现功能:获取yaml中的文件信息,用soket进行文件传输(TCP+三次握手)

socker_client.py:

实现功能:利用server端传过来的文件信息做校验,并继续文件接收

properties:

为yaml文件,储存文件信息

#file:socker_server.py

#_*_coding:utf-8_*_

#by Linhut

#time:/4/8

import SocketServer,yaml,json

class socketHandler(SocketServer.BaseRequestHandler):

def setup(self):

print '\033[32mServer starting successful ....\033[0m'

with open('F:/cgi-bin/p2/config/properties', 'r') as f:

content = f.read() #读出来内容

self.cfg = yaml.load(content) #通过yaml变成字典

def handle(self):

conn = self.request #把客户端的soket对象收到

first_mgs = conn.recv(1024) #判断第一次握手成功,发生文件头部

if first_mgs == 'successful':

with open(self.cfg['file_matadata']['filepath'],'rb') as f: #rb打开文件

self.content = f.read()

filesize = len(self.content)

self.cfg['file_matadata']['filesize'] = filesize # raml文件赋值文件大小

ack_msg = json.dumps(self.cfg).encode()

conn.send(ack_msg) #给客户端发送信息

else:

print 'client failed...'

if conn.recv(1024) == 'start':

conn.send(self.content)

finish_msg = conn.recv(1024)

print finish_msg

def finish(self):

pass

class socketserever(SocketServer.TCPServer):

pass

class MyServer(SocketServer.TCPServer,SocketServer.ThreadingMixIn):

pass

if __name__=='__main__':

server = socketserever(('127.0.0.1',),socketHandler)

server.serve_forever()

#file:socker_client.py

#_*_coding:utf-8_*_

#by Linhut

#time:/4/8

import socket,json,sys,time

recv_file = b''

recv_size = 0

server_address = ('127.0.0.1',)

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

for i in range(5):

try:

sock.connect(server_address)

break

except Exception as e:

print 'client connection server \033[31mfailad\033[0m,please 3s retry..'

time.sleep(3)

else:

print 'client exit..'

sys.exit(10)

sock.send('successful')

ack_msg = json.loads(sock.recv(1024).decode()) #拿ack信息

print ack_msg

if ack_msg['file_matadata']:

filename = ack_msg['file_matadata']['filename']

filesize = ack_msg['file_matadata']['filesize']

name = raw_input('raw_input you locla filename:')

save_file_path = 'C:/Users/T530_I7QM/Desktop/%s.pdf'%name

sock.send('start') #告诉服务器端可以发送数据了

while recv_size < filesize:

content = sock.recv(2048)

recv_file += content

recv_size += 2048

print '[%s] recv_size:%s'%(filename,recv_size)

else:

with open(save_file_path,'ab+') as f:

f.write(recv_file)

sock.send('\033[32m client recv finished\033[0m') #完成并发生一个消息

print '\033[32m recv finished.. \033[0m'

#file:properties

ack_msg:

filename: qqq.pdf

filepath: C:/Users/T530_I7QM/Desktop/qqq.pdf

filesize:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。