【发布时间】:2012-05-15 16:36:26
【问题描述】:
我在 python 套接字编程中制作了一个简单的服务器-客户端代码。客户端获取其侧的屏幕截图(图像)并将其发送到服务器。当我使用'localhost'传输图像时它工作正常,即从一个文件夹到另一个......但主要问题是当图像传输到另一台计算机时......服务器端接收到的图像已损坏......进一步更多我观察到客户端(发送方图像,即未损坏的图像)和服务器(接收方图像,即损坏的图像)之间的差异每次几乎是 1Kb............
我的客户端(发送方)代码是--
os.system('scrot screen.bmp') #command to take screen shot
FILE = "screen.bmp"
f = open(FILE, "rb")
data = f.read()
f.close()
del f
imagesize = int(os.path.getsize('screen.bmp'))
sendsize = '%1024s' %imagesize
s.sendall(str(sendsize))
print 'length of data = ',len(data)
s.sendall(str(len(data)))
s.sendall(str(data))
和服务器端(接收端)---
filename='screen.bmp'
print '[Media] Starting media transfer for ',filename
os.system('rm -f screen.bmp')
f = open(filename,"wb")
expsizeimage = int(conn.recv(1024))
data1 = conn.recv(1024)
data2=''
for i in range(0,len(data1)):
if(not(data1[i]=='0' or data1[i]=='1' or data1[i]=='2' or data1[i]=='3' or data1[i]=='4' or data1[i]=='5' or data1[i]=='6' or data1[i]=='7' or data1[i]=='8' or data1[i]=='9')):
break
data2=data2+data1[i]
print '------------'+data2+'-------------'+str(m)+'----------------'
print 'size of data:' ,int(data2)
print 'the expected size of image is: ', expsizeimage
data=9
del data
sized=0;
while 1:
data = conn.recv(expsizeimage)
print 'received length of image = ',len(data)
f.write(data)
sized=sized+len(data)
print "sized------"+str(sized)
del data
if(sized>=int(data2)):
break
print "saved the screentshot data recieved"
【问题讨论】:
-
如果您已收到除 1024 字节之外的所有数据,则您明确
breaking。你预计会发生什么? -
当没有数据时你应该可以安全地破解,例如
if not data: break。你不需要做任何花哨的事情来摆脱。