首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将bytearray发送给特定的接收方

如何将bytearray发送给特定的接收方
EN

Stack Overflow用户
提问于 2020-04-10 20:23:57
回答 1查看 24关注 0票数 0

我有一个用Java编写的TCP服务器和客户端。服务器可以向客户端发送命令,然后客户端将执行该命令,例如:向服务器发送图像。

我正在发送一个字节数组的数据,这是有效的。

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

这就是我的代码发送字节:

Client.java

代码语言:javascript
运行
复制
    public void writeBytes(byte[] bytes, Socket socket) throws IOException {
        DataOutputStream out = new DataOutputStream(socket.getOutputStream());
        out.write(bytes);
        out.flush();
    }

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

Server.java

代码语言:javascript
运行
复制
    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));
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-10 20:30:11

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

一种快速简单的协议是,首先发送要发送的数据的长度,然后发送数据:

代码语言:javascript
运行
复制
    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
    out.writeInt(bytes.length);
    out.write(bytes);
    out.flush();

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

代码语言:javascript
运行
复制
    DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
    int length = in.readInt()
    byte[] buffer = new byte[length];
    in.readFully(buffer);

当你使用像语音聊天这样的应用时,协议必须变得更加复杂。每条消息都必须有元数据,比如它包含的数据类型:图像、语音或其他数据。此外,您可能不希望从头开始设计此协议,而是使用已经存在的东西-例如real-time streaming protocol (RTSP)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61140171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档