通过TCP将图像从C#发送到Python无法正常工作

时间:2015-09-20 23:22:23

标签: c# python image networking tcp

问题

我正在尝试通过TCP发送图像(PNG)并将其保存在服务器上,客户端是用C#编写的,服务器是用Python编写的。我已经测试过服务器可以使用Python编写的程序,但是当我尝试使用C#执行相同操作时,它只会发送一个部分并被卡住。

我试图打印服务器正在接收的数据,似乎只接收到前1024个字节,然后它就会卡住尝试接收更多。

注意:我已经使用“localhost”更改了主机,并使用通用端口更改了端口,但我实际上是在非本地的虚拟专用服务器上测试它,实际上它是从托管公司租用的。

以下是代码:

Python客户端(可行):

import socket

s = socket.socket()
host = "localhost"
port = 12345
s.connect((host, port))

file = open("image.png", "rb")
imgData = file.read()

s.send(imgData)

s.close()

C#客户端(这不起作用):

TcpClient tcp = new TcpClient("localhost", 12345);

NetworkStream stream = tcp.GetStream();

byte[] image = File.ReadAllBytes("image.png");
stream.Write(image, 0, image.Length);

Python服务器

#!/usr/bin/python

import socket
import os
import io
import os.path

def Main():
    s = socket.socket()
    host = socket.gethostname()
    port = 12345
    s.bind((host, port))

    s.listen(1)
    print("Waiting for a connection...")

    c, addr = s.accept()
    print("Connection from: " + str(addr))

    if os.path.isfile("image.png"):
        os.remove("image.png")

    file = open("image.png", "w+b")
    while True:
        data = c.recv(1024)
        if not data:
            break
        file.write(data)
        print(str(list(data)))

    print("Done.")
    c.close()
    s.close()

if __name__ == "__main__":
    Main()

0 个答案:

没有答案