2

我试图使用 tcp 从服务器向客户端发送图像文件。我尝试打开文件,读取它,然后使用 self.transport.write 传输它。在客户端,当我收到数据时,我以附加模式打开一个名为 Image 的文件,然后写入它。

客户:

class EchoClient(protocol.Protocol):
    def dataReceived(self, data):         
        print 'writing to file'
        f = open('image.png','a')
        f.write(data)
        f.close() 

服务器(继承协议):

//somewhere in the code

     image = open(self.newdict[device_str] + attribute_str + '.png')
     data = image.read()
     image.close()
     self.comm_protocol.transport.write(data)

在客户端打开文件会导致格式错误。任何想法我做错了什么?将图像作为字符串流式传输的想法是否不好?如果是这样,还有其他方法可以将数据传输到客户端吗?

4

1 回答 1

0

您必须使用 'b' 标志以二进制模式打开文件,例如open(..., 'wb')。

文件损坏的原因是“文本模式”做了以下两件事之一:

  1. 在 UNIX 上,它什么也不做。
  2. 在 Windows 上,它只是替换\n\r\n.

现在,如果它是一个文本文件,你几乎无法区分。但是,如果它是二进制文件,则该字节可能不再意味着“换行符”。通常,二进制文件是由固定长度的结构构成的,因此在预期的位置粘贴两个字节会导致各种破坏。

于 2013-05-09T04:39:33.323 回答