【发布时间】:2015-11-12 03:36:14
【问题描述】:
我想做一个协议,通过将给定数据写入客户端 C:\ 目录中的文件,有效地将 jpg 文件数据从服务器写入客户端。
当新的 jpg 文件在客户端计算机上存在并完成时,协议会执行此操作,
但协议会不断重复自己并将数据写入文件而没有结束,
导致它具有巨大的文件大小
并且协议没有结束,所以我的客户端可以访问我拥有的其他协议。
谁能注意到我做错了什么?
服务器协议:
if data == "screen shot":
im = ImageGrab.grab()
im.save(r'C:\screen.jpg')
file = open(r'C:\screen.jpg','rb').read()
sizeoffile = os.stat(r'C:\screen.jpg').st_size
client_socket.send(str(sizeoffile))
if data == "Send file":
client_socket.send(file)
客户协议:
if x == "screen shot":
print "Here you go"
sizeof = my_socket.recv(1024)
print "Size of file: " + str(sizeof)
accumulated = bytes(0)
doit = True
file = open(r'C:\serverscreen.jpg','wb')
my_socket.send("Send file")
while doit:
if accumulated < sizeof:
print "Receiving..."
my_socket.send("GOT IT")
data = my_socket.recv(1024)
accumulated = os.stat(r'C:\serverscreen.jpg').st_size # do a loop to check if accumulated equals sizeof to know if entire file has been, accumulated
print "Accumulated: " + str(accumulated)
file.write(data)
else:
doit = False
file.close()
更新
客户协议:
if x == "screen shot":
print "Here you go"
sizeof = int(my_socket.recv(1024))
print "Size of file: " + str(sizeof)
accumulated = bytes(0)
doit = True
file = open(r'C:\serverscreen.jpg','wb')
my_socket.send("Send file")
while doit:
if accumulated < sizeof:
print "Receiving..."
my_socket.send("GOT IT")
data = my_socket.recv(1024)#round(float(sizeof))))
accumulated += struct.unpack('l',data) #os.stat(r'C:\serverscreen.jpg').st_size # do a loop to check if accumulated equels sizeof to know if entire file has been, accumulaed
print "Accumulated: " + str(accumulated)
file.write(data)
else:
doit = False
file.close()
【问题讨论】:
-
提示:在客户端,
sizeof是一个字符串,而不是一个整数。对于您的下一个问题,请阅读struct文档。 -
好的,谢谢,我查看了它,并进行了一些更改,但现在有一个奇怪的问题,它根本不想进入 doit 循环......我会更新帖子给你看,再次感谢!
标签: python python-2.7 sockets network-protocols