【发布时间】:2018-06-30 08:30:19
【问题描述】:
我已经阅读了几篇关于如何在 Python 中使用套接字发送图片以及如何在 Java 中使用套接字发送图片的文章,我想将两者结合起来并使用套接字将图片从 Python 发送到 Java两端。我的大部分代码都取自我阅读的帖子,但这里是 python 客户端:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.0.12",4141))
try:
file = open("subbed.jpg", 'rb')
bytes = file.read()
print "{0:b}".format(len(bytes))
size = len(bytes)
s.sendall(size)
answer = s.recv(4096)
print "Answer = %s" %answer
if answer == 'GOT SIZE':
s.sendall(bytes)
answer = s.recv(4096)
if answer == 'GOT IMAGE' :
s.sendall("byte")
file.close()
finally:
s.close()
Java 服务器的代码是:
public static void main(String[] args) {
while(true) {
try (
ServerSocket server = new ServerSocket(PORT_NUMBER);
Socket client = server.accept();
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
InputStream in = client.getInputStream()) {
System.out.println("GOT CONNECTION FROM: " + client.getInetAddress().toString());
byte[] sizeAr = new byte[4];
in.read(sizeAr);
int size = ByteBuffer.wrap(sizeAr).asIntBuffer().get();
System.out.println(Integer.toBinaryString(size));
out.println("GOT SIZE");
byte[] imageAr = new byte[size];
in.read(imageAr);
BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageAr));
ImageIO.write(image, "jpg", new File("C:\\myprivatelocation\\test.jpg"));
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
}
最初的问题来自于发送我认为的尺寸。我不是 python 专家,也不是 Java 专家,但我认为发生的事情是 Python 将大小作为字符串发送,而 Java 将其作为字节数组接收并将其转换为整数,并且存在一些差异它们以两种语言存储的方式。任何人都可以在这个问题上提供任何帮助吗?
【问题讨论】:
标签: java python image sockets networking