将图像从 java 客户端发送到 python 服务器

Send an image from java client to python server

我正在尝试以字节数组的形式从客户端应用程序向服务器发送图像。服务器代码写在python中,而客户端代码写在java中。图像正在正确传输,但保存在服务器计算机上的图像已损坏。

以下是服务器的代码。

import socket
import struct

HOST = "192.168.1.100"
PORT = 9999

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)

print('SERVER STARTED RUNNING')

while True:
    client, address = s.accept()
    buf = ''
    while len(buf) < 4:
        buf += client.recv(4 - len(buf))
    size = struct.unpack('!i', buf)[0]
    with open('/home/isaac/Desktop/image.jpg', 'wb') as f:
        while size > 0:
            data = client.recv(1024)
            f.write(data)
            size -= len(data)
    print('Image Saved')
    client.sendall('Image Received')
    client.close()

以下是java客户端的源代码:

public static void main(String[] args) throws IOException {
    byte[] array = extractBytes("/home/isaac/Desktop/cat.jpg");
    Socket sock = new Socket(IP_ADDRESS, PORT_NO);
    DataOutputStream dos = new DataOutputStream(sock.getOutputStream());
    System.out.println("Array Length - " + array.length);
    dos.writeInt(array.length);
    dos.write(array);
    BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    System.out.println(reader.readLine());
}

希望你能帮助我。我已经尝试 google 得到我的答案,但到目前为止还没有解决方案。

你在什么意义上得到了损坏的图像?我已经用下面的数组试过了:

byte[] array = new byte[3000];
for(int i=0; i<array.length; i++) {
    array[i] = (byte)('0' + (i % 10));
}

我得到了我发送的相同数组。

另一件事,只是为了确定:文件小于 2Gb,对吗?

这对你有帮助

import java.nio.file.Files;
File file = new File("picture path");
byte[] array = Files.readAllBytes(file.toPath());