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

标签 java python sockets tcp

我正在尝试以字节数组的形式从客户端应用程序向服务器发送图像。服务器代码是用 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());
}

希望你能帮助我。我尝试通过谷歌搜索来获得答案,但目前还没有解决方案。

最佳答案

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

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

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

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

关于java - 将图像从 java 客户端发送到 python 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28942391/

相关文章:

java - 使用 Java 和 Jackson 将数组写入 JSON

c - OpenSSL DTLS 连接从未建立

java - 如何在 Java 中创建 ZIP 文件?

java - libGdx 多边形碰撞检测

java - 如何使用 IJavaElement

python - 不区分大小写的 argparse 选择

python - 如何从数据帧列字符串中提取周期和变量名称以进行多索引面板数据准备

python - 与 super() 和 __init__() 有关的问题

javascript - 从 websockets 接收到特定数据后仅更改特定值

java - 使用套接字的 HTTP 响应中的随机字符