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