本篇文章主要介绍了python:socket传输大文件示例,具有一定的参考价值,有兴趣的可以了解一下,
文件可以传输,但是对比传输前后的文件:socket_test.txt,末尾有一些不一致服务端代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding(“utf-8″)
import time
”’
等待连接
等待发送文件
读取数据
写入文件并且保存
等待连接
”’
import socket
import threading
import time
import struct
def function(newsock, address):
fileinfo_size = struct.calcsize(‘128si’)
”’定义文件信息(包含文件名和文件大小)大小。128s代表128个char[](文件名),i代表一个integer or long(文件大小)”’
while 1:
try:
fhead = newsock.recv(fileinfo_size)
filename, filesize = struct.unpack(‘128si’, fhead)
”’把接收到的数据库进行解包,按照打包规则128si”’
print “address is: “, address
print filename, len(filename), type(filename)
print filesize
#filename = ‘new_’+filename.strip(‘\00’) # 命名新文件new_传送的文件
filename = filename.strip(‘\00’)
fp = open(filename, ‘wb’) # 新建文件,并且准备写入
restsize = filesize
print “recving…”
while 1:
if restsize > 102400: # 如果剩余数据包大于1024,就去1024的数据包
filedata = newsock.recv(10240)
else:
filedata = newsock.recv(restsize)
fp.write(filedata)
#break
if not filedata:
break
fp.write(filedata)
restsize = restsize – len(filedata) # 计算剩余数据包大小
if restsize