gpt4 book ai didi

java - 如何将字节数组发送到特定接收者

转载 作者:行者123 更新时间:2023-12-01 17:30:00 25 4
gpt4 key购买 nike

我有一个 Java 中的 TCP 服务器和客户端。 Server可以向Client发送命令,Client执行该命令,例如:向Server发送一张图片。

我用字节数组发送数据,这工作正常。

但是让我们想象一下,我想分别发送图像和文件。服务器如何知道哪个是正确的字节数组?或者,如果我想制作一个 VoiceChat(需要连续发送字节数组)并单独发送图像?

这是我的代码发送字节:

客户端.java

    public void writeBytes(byte[] bytes, Socket socket) throws IOException {
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.write(bytes);
out.flush();
}

这是我接收并将它们转换为图像的代码:

服务器.java

    public BufferedImage writeScreenshot(Socket socket, int length) throws IOException {
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
byte[] buffer = new byte[length];
in.readFully(buffer);

return ImageIO.read(new ByteArrayInputStream(buffer));
}

最佳答案

您需要设计一个 "protocol" for the communication 。协议(protocol)定义了可以交换的消息是什么以及它们如何在较低级别的数据流中表示。

一个快速简单的协议(protocol)是您首先发送要发送的数据的长度,然后发送数据:

    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeInt(bytes.length);
out.write(bytes);
out.flush();

接收者现在必须读取长度字段:

    DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
int length = in.readInt()
byte[] buffer = new byte[length];
in.readFully(buffer);

当您使用语音聊天等应用程序时,协议(protocol)必须变得更加复杂。每条消息都必须具有元数据,例如它包含什么类型的数据:图像或语音或其他内容。此外,您可能不想从头开始设计此协议(protocol),而是使用已经存在的协议(protocol) - 例如 real-time streaming protocol (RTSP) .

关于java - 如何将字节数组发送到特定接收者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61140171/

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