使用python tcp socket发送图像

时间:2014-11-11 15:55:18

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

我是python和英语的新手:)。我正在尝试发送图像文件usşngpython套接字,我写了这个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()

1 个答案:

答案 0 :(得分:2)

默认情况下,Python函数open text 模式打开文件,这意味着它将把所有输入/输出作为 text 处理,而图像肯定是< EM>二进制

文本模式下的文件将执行翻译换行序列(在不同系统上不同)的操作。这意味着您阅读的数据将被破坏。

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

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

然而,使用您的代码会导致另一个问题,即您不能再使用readline了。并不是说它有意义,因为二进制数据中没有“行”,所以将二进制数据读成行。

您必须使用read功能。