【问题标题】:sending images using python tcp socket使用 python tcp 套接字发送图像
【发布时间】:2015-01-08 05:46:37
【问题描述】:

我是 python 和英语的新手 :)。我正在尝试发送一个图像文件 usşng python sockets,我已经写了这个 cosdes。它说它可以工作,但我得到一个空文件或缺少图像文件。 这是我写的代码:

服务器:

import socket


host = socket.gethostname()

port = 5000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((host, port))

s.listen(1)

sunucu , adres = s.accept()

print "baglanti saglandi"

def recvall(baglanti, buf):

    data = ""
    while len(data) < buf:

        packet = baglanti.recv(buf - len(data))

        if not packet:

            return None

        data += packet

    return data


f = open("ggg.png", "w")

while True:

    veri = sunucu.recv(512)

    if not veri:

        break

    f.write(veri)

f.close()

print "resim alindi."


sunucu.close()

s.close()

和客户:

import socket


host = socket.gethostname()

port = 5000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host , port))



f = open("ornekresim.png", "r")

while True:

    veri = f.readline(512)

    if not veri:

        break

    s.send(veri)

f.close()

print "resim gonderildi"

s.close()

【问题讨论】:

    标签: python-2.7 tcp network-programming python-sockets


    【解决方案1】:

    默认情况下,Python 函数opentext 模式打开文件,这意味着它将以 text 的形式处理所有输入/输出,而图像绝对是 二进制

    文本模式的文件会做一些事情,比如翻译换行符序列(在不同的系统上是不同的)。这意味着您读取的数据将被损坏。

    要以二进制模式打开文件,然后将'b' 附加到模式标志,例如

    f = open("ornekresim.png", "rb")  # <-- Note the 'b' in the mode
    

    但是,对于您的代码,这会导致另一个问题,即您不能再使用readline。无论如何,将二进制数据读取为行并不是很有意义,因为二进制数据中没有“行”。

    您必须改用read 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2016-10-05
      • 2012-11-18
      相关资源
      最近更新 更多