通过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()
您需要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流