通过TCP从c#发送图像到Python不工作

本文关键字:Python 工作 图像 TCP 通过 | 更新日期: 2023-09-27 18:13:52

问题

我试图通过TCP发送图像(PNG)并将其保存在服务器上,客户端是用c#编写的,服务器是用Python编写的。我已经测试了服务器与Python编写的程序一起工作,但是当我尝试使用c#做同样的事情时,它只发送一部分并且卡住了。

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

注意:我已经用"localhost"改变了主机,用一个通用的端口,但我实际上是在一个虚拟专用服务器上测试这不是本地的,它实际上是从托管公司租来的。

代码如下:

Python客户端 (this works):

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()
<<p> c#客户机/strong>(这并不工作):
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()

通过TCP从c#发送图像到Python不工作

您需要close TCP流,以便发送所有数据。

using (var tcp = new TcpClient("localhost", 12345))
{
    byte[] image = File.ReadAllBytes("image.png");
    tcp.GetStream().Write(image, 0, image.Length);
}

using语句将在代码块运行后通过Dispose方法关闭TcpClient。这将关闭并重置tcp流