当前位置: 首页 > 知识库问答 >
问题:

从Java客户端向Python服务器发送图像时图像文件损坏

法玮
2023-03-14

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

如果我理解正确,只需将图像数据以bytearray的形式发送到接收端口。

现在,在服务器(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”的新文件,它在两条路径中的大小都相同,但我无法打开它,因为它不知何故已损坏或损坏。

你能告诉我出了什么问题吗,还请告诉我我的代码应该是什么样子?正如我所说,我是编程新手,我应该做什么的模糊概念对我没有太大帮助。

共有1个答案

宋健柏
2023-03-14

你的两个代码都可以,只有一件事。在java代码中,首先要发送数据的大小,但在python代码中,不能将其与图像分离。

最好的办法是,不要发送大小,而是通过发送整个图像开始发送。我的意思是把这一行注释掉:

        dos.writeInt(size);

它应该能解决问题。

祝你好运。

 类似资料:
  • 我正在尝试使用gRPC和ProtoBuf将图像从Java客户端发送到Python服务器。我将图像编码为ByteString,并使用blockingStub发送它。Python服务器接收ProtoBuf,但Java ByteString现在是Python str。我不知道如何从str恢复图像。 当我调用服务器时: 它提出: 回溯(最近一次调用): 文件“/usr/local/lib/python2.

  • 我正试图从套接字服务器(Java)向套接字客户端(Python)发送一个映像,但客户端中接收到的映像大小不正确,无法打开。我不知道我做错了什么。有什么建议吗?

  • 我有一个服务器端函数,它使用Python Imaging Library绘制图像。Java客户端请求图像,通过套接字返回并转换为BufferedImage。 我在数据前面加上要发送的图像的大小,然后是CR。然后我从套接字输入流中读取这个字节数,并尝试使用ImageIO转换为BufferedImage。 在客户端的缩写代码中: 和服务器: 这适用于发送和接收字符串,但图像转换(通常)失败。我正在尝试

  • 问题内容: 我正在尝试使用HttpUrlConnection将图像发送到服务器,因为它是Google推荐的。我决定将图像转换为Base64字符串,然后将其发送到服务器,然后将其解码为.jpg文件。但是这种方法仅适用于小尺寸缩略图,而我无法发送全尺寸图像。 这是android客户端代码: Node.js服务器代码: 由于BufferedWriter的大小限制,我无法对完整尺寸的图像使用相同的方法-b

  • 我也试图从Java服务器和Python客户机传输数据。我成功地将数据从客户端传输到服务器,但根本没有接收到数据。 在python客户机上,我有以下内容:(注意,这是在一个单独的线程中运行的) 如果这是成功的工作,输出将是客户端套接字值,等待服务器,然后得到一些数据。然而,它正陷入等待数据的困境。 这意味着套接字显然不是None,它正在等待缓冲区接收?我将接收缓冲区大小设置为1,以查看是否有任何数据

  • 我正在编写一个程序,将数据从服务器连续发送到客户端。在这里,我使用示例的时间戳将其发送给连接的多个客户端。我使用多线程来支持多个客户端。我希望每10秒向客户端发送一次时间。但在我的代码中,客户端在收到第一个数据后停止。如何让客户端连续接收数据。我尝试在客户端添加while循环,但这并不可行。有什么建议吗 以下是示例代码:服务器端: 客户端: 我的输出: 客户端所需输出: