gpt4 book ai didi

java - 在 Java 客户端和 Twisted Python 套接字服务器之间发送缓冲图像

转载 作者:行者123 更新时间:2023-11-29 05:58:44 25 4
gpt4 key购买 nike

我有一个使用 Python 图像库绘制图像的服务器端函数。 Java 客户端请求图像,图像通过套接字返回并转换为 BufferedImage。

我在数据前加上要发送的图像大小,然后是 CR。然后我从套接字输入流中读取这个字节数并尝试使用 ImageIO 转换为 BufferedImage。

在客户端的缩写代码中:

public String writeAndReadSocket(String request) {
// Write text to the socket
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(request);
bufferedWriter.flush();

// Read text from the socket
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

// Read the prefixed size
int size = Integer.parseInt(bufferedReader.readLine());

// Get that many bytes from the stream
char[] buf = new char[size];
bufferedReader.read(buf, 0, size);
return new String(buf);
}

public BufferedImage stringToBufferedImage(String imageBytes) {
return ImageIO.read(new ByteArrayInputStream(s.getBytes()));
}

和服务器:

# Twisted server code here

# The analog of the following method is called with the proper client
# request and the result is written to the socket.
def worker_thread():
img = draw_function()
buf = StringIO.StringIO()
img.save(buf, format="PNG")
img_string = buf.getvalue()
return "%i\r%s" % (sys.getsizeof(img_string), img_string)

这适用于发送和接收字符串,但图像转换(通常)会失败。 我试图理解为什么图像没有被正确读取。我最好的猜测是客户端没有读取正确数量的字节,但老实说我不知道​​为什么会这样案例。

旁注:

  • 我意识到 char[]-to-String-to-bytes-to-BufferedImage Java 逻辑是迂回的,但直接读取字节流会产生相同的错误。
  • 我有一个客户端套接字不持久的工作版本,即。处理请求并断开连接。该版本工作正常,因为我不需要关心图像大小,但我想了解为什么建议的方法不起作用。

最佳答案

  1. BufferedReader.read()不能保证填充缓冲区,并且将图像转换为字符串并返回不仅毫无意义而且是错误的。

  2. 字符串不是二进制数据的容器,不能保证往返有效。

最好重新设计协议(protocol),这样你就可以去掉 readLine() ,并以二进制形式发送长度,并且可以使用 DataInputStream 读取整个流.

一般在处理二进制协议(protocol)时,答案总是DataInputStreamDataOutputStream ,除非字节顺序不是规范的网络字节顺序,这是协议(protocol)设计错误,在这种情况下,您需要查看字节顺序 ByteBuffers .

关于java - 在 Java 客户端和 Twisted Python 套接字服务器之间发送缓冲图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com