900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python socket 大文件_python:socket传输大文件示例

python socket 大文件_python:socket传输大文件示例

时间:2024-01-12 19:13:54

相关推荐

python socket 大文件_python:socket传输大文件示例

#!/usr/bin/python

# -*- coding: utf-8 -*-

importsys

reload(sys)

sys.setdefaultencoding("utf-8")

importtime

'''

等待连接

等待发送文件

读取数据

写入文件并且保存

等待连接

'''

importsocket

importthreading

importtime

importstruct

deffunction(newsock, address):

FILEINFO_SIZE=struct.calcsize(飘sI')

'''定义文件信息(包含文件名和文件大小)大小。128s代表128个char[](文件名),I代表一个integer or long(文件大小)'''

while1:

try:

fhead=newsock.recv(FILEINFO_SIZE)

filename, filesize=struct.unpack(飘sI', fhead)

'''把接收到的数据库进行解包,按照打包规则128sI'''

print"address is: ", address

printfilename,len(filename),type(filename)

printfilesize

#filename = 'new_'+filename.strip('\00') # 命名新文件new_传送的文件

filename=filename.strip('\00')

fp=open(filename,'wb')# 新建文件,并且准备写入

restsize=filesize

print"recving..."

while1:

ifrestsize >102400:# 如果剩余数据包大于1024,就去1024的数据包

filedata=newsock.recv(10240)

else:

filedata=newsock.recv(restsize)

fp.write(filedata)

#break

ifnotfiledata:

break

fp.write(filedata)

restsize=restsize-len(filedata)# 计算剩余数据包大小

ifrestsize <=0:

break

fp.close()

print"recv succeeded !!File named:", filename

exceptException, e:

printunicode(e).encode('gbk')

print"the socket partner maybe closed"

newsock.close()

break

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 创建tcp连接

sock.bind((ཆ.240.146.82',8887))# 定于端口和ip

sock.listen(5)# 监听

whileTrue:

newsock, address=sock.accept()

print"accept another connection"

tmpThread=threading.Thread(target=function, args=(newsock, address))# 如果接收到文件,创建线程

tmpThread.start()# 执行线程

print'end'

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