Python 从客户端到服务器的扭曲图像传输导致格式错误

Python 从客户端到服务器的扭曲图像传输导致格式错误,python,image,file,twisted,Python,Image,File,Twisted,我试图使用tcp从服务器向客户端发送一个图像文件。我尝试打开文件,读取它,然后使用self.transport.write传输它。在客户端,当我接收到数据时,我会以追加模式打开一个名为Image的文件,并对其进行写入 客户: class EchoClient(protocol.Protocol): def dataReceived(self, data): print 'writing to file' f = open('image.p

我试图使用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() 
服务器(继承协议):


在客户端打开文件会出现错误的格式错误。你知道我做错了什么吗?将图像流式处理为字符串的想法是错误的吗?如果是这样,是否有其他方法可以将数据传输到客户端?

您必须以二进制模式打开文件,并使用“b”标志,如
打开(…,“wb”

文件损坏的原因是“文本模式”执行以下两项操作之一:

  • 在UNIX上,它什么也不做
  • 在Windows上,它只是将
    \n
    替换为
    \r\n

  • 现在,如果它是一个文本文件,你很难分辨出区别。但是,如果它是一个二进制文件,那个字节可能不再意味着“换行符”。一般来说,二进制文件是由固定长度的结构构造而成的,因此在预期的位置插入两个字节会造成各种破坏。

    我没有得到它……我的客户端在OS X上,服务器在Ubuntu上,即所有linux上。所以,文本模式应该可以正常工作,不是吗?你应该仔细观察,而不是让图像阅读器打开它,然后告诉你“格式错误”。这有什么不好?它被截断了吗?乱七八糟?字节在中间的不可预测的位置是错误的吗?你期望答案在这里做很多猜测,这不是最好的问题。
    //somewhere in the code
    
         image = open(self.newdict[device_str] + attribute_str + '.png')
         data = image.read()
         image.close()
         self.comm_protocol.transport.write(data)