java - 将图像从 Java 客户端发送到 Python 服务器时图像文件损坏

标签 java python image sockets

我想通过套接字将图像从我的客户端(这是一个 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/

相关文章:

image - 在 MATLAB 中翻转和旋转彩色图像

java - facesContext.getExternalContext().getRequest().getSession() 的返回对象是什么类?

java - Spring Boot : Preload Data and configure H2 for tests. 特殊配置问题

java - 如何在禁用 IMAP/POP3 访问的情况下从 Gmail 获取电子邮件

python - Pandas 数据框中的文本拆分列表

swift - 对图像进行着色,快速取错颜色

java - 无法加载ApplicationContext。无法创建集成测试

python - Pandas groupby : change values in one column based on values in another column

python - 为什么 q_net 有这么多的输入层?

vb.net - 如何在datagridview单元格中添加图像和文本