【发布时间】:2017-02-25 14:11:13
【问题描述】:
我的 Windows PC 上有一个用 python 编写的简单服务器,它从目录中读取文件,然后通过 TCP 将文件发送到客户端。
客户端正确接收 HTML 和 Javascript 等文件(发送和原始文件匹配)。
问题是图像数据被截断。
奇怪的是,不同的图像以不同的长度被截断,但每张图像都是一致的。
例如,一个特定的 1MB JPG 总是以 95 个字节接收。另一个应该是 7KB 的图像被接收为 120 字节。
在notepad++中打开截断的图像文件,是的数据是正确的。 (唯一的问题是文件结束得太快了)。
我没有看到文件结束位置的模式。每个图像的截断前后的字符/字节不同。
我尝试了三种不同的方式让服务器读取文件,但它们的结果都是一样的。
这里是文件读取和发送的sn-p:
print ("Cache size=" + str(os.stat(filename).st_size))
#1st attempt, using readlines
fileobj = open(filename, "r")
cacheBuffer = fileobj.readlines()
for i in range(0, len(cacheBuffer)):
tcpCliSock.send(cacheBuffer[i])
#2nd attempt, using line, same result
with open(filename) as f:
for line in f:
tcpCliSock.send(f)
#3rd attempt, using f.read(), same result
with open(filename) as f:
tcpCliSock.send(f.read())
脚本将读取的文件大小打印到控制台,字节数与原始图像匹配。所以这证明问题出在发送上,对吧?
如果问题在于发送,我可以更改什么以正确发送整个图像?
【问题讨论】: