我想通过套接字将图像从我的客户端(这是一个 Java 应用程序)发送到我的服务器,该服务器应该用 Python 编程。不幸的是,我是 Python/Java 编程新手,不理解我在网上找到的大多数方法,但到目前为止似乎效果最好的是:
在客户端我这样做了
String pathname = new String("C:\\Users\\vince\\Pictures\\Saved Pictures\\M249.jpg");
Socket photoSocket = new Socket(IP_ADDRESS, PORT_NO);
DataOutputStream dos = new DataOutputStream(photoSocket.getOutputStream());
FileInputStream fis = new FileInputStream(pathname);
int size = fis.available();
byte[] data = new byte[size];
fis.read(data);
dos.writeInt(size);
dos.write(data);
dos.flush();
dos.close();
fis.close();
photoSocket.close();
如果我理解正确的话,只是将字节数组形式的图像数据发送到接收端口。
现在在服务器(Python)上我有这个:
import socket # Import socket module
s = socket.socket() # Create a socket object
port = 1234 # Reserve a port for your service.
s.bind(("192.168.178.44", port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
conn, addr = s.accept()
print('client connected ... ', addr)
f = open('tst.jpg', 'wb')
while True:
data = conn.recv(1024)
if not data: break
f.write(data)
print('writing file ....')
f.close()
print("finished writing file")
conn.close()
print('client disconnected')
它似乎在传输数据,因为启动我的 python 服务器文件然后运行 java 应用程序后,我的 python 控制台显示:
客户端已连接... ('192.168.178.44', 51061) 正在写入文件.... 正在写入文件.... 正在写入文件.... 正在写入文件.... 正在写入文件.... 正在写入文件.... 正在写入文件.... 文件写入完成 客户端已断开连接
然后我有一个名为“tst.jpg”的新文件,它在两个路径中具有相同的大小,但我无法打开它,因为它以某种方式损坏或损坏。
你能告诉我出了什么问题吗?我的代码应该是什么样子?正如我所说,我对编程很陌生,而且关于我应该做什么的模糊概念对我没有多大帮助。
最佳答案
你的两个代码都可以,只有一件事。 在java代码中,您首先发送数据的大小,但在python代码中,您不会将其与图像分开。
最好的办法就是不发送尺寸,而是通过发送整个图像来开始发送。 我的意思是注释掉这一行:
dos.writeInt(size);
应该可以解决问题。
祝你好运。
关于java - 将图像从 Java 客户端发送到 Python 服务器时图像文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62685365/