gpt4 book ai didi

Java 与 C++ 套接字通信、DataInputStream 和 eof、二进制、加密

转载 作者:行者123 更新时间:2023-11-28 03:58:18 25 4
gpt4 key购买 nike

我试图让 Java 服务器和 C++ 客户端在以下条件下通过 TCP 进行通信:文本模式和二进制/加密模式。我的问题在于 DataInputStream 的 read(byte []) 用于返回 -1 的流结尾的 eof 指示符。如果我发送二进制数据,如何防止随机字节序列发生以表示 eof 并错误地向 read() 指示流正在结束?看来我仅限于文本模式。在我需要扩展之前,我可以忍受它,但随后我遇到了要加密文本并添加消息身份验证的问题。即使我是从另一个 Java 程序而不是 C++ 发送的,使用 AES+MAC 加密字符串也会产生二进制输出而不是普通字符串。什么是防止某些加密序列包含与 eof 相同的部分?那么,这里的解决方案是什么?

最佳答案

If I send binary data, what's to prevent a random byte sequence happening to represent an eof and falsely indicating to read() that the stream is ending?

在大多数情况下(包括 TCP/IP 和类似的网络协议(protocol)),没有针对 EOF 的特定数据表示。相反,EOF 是一种逻辑抽象,表示您已到达数据流的末尾。例如,对于 Socket,这意味着套接字的输入端已关闭并且您已读取所有未完成的字节。 (对于文件,这意味着您已经读取了文件的最后一个字节。)

由于(逻辑)EOF 没有数据表示,因此您无需担心得到错误的 EOF。总之,这里没有问题要解决。

关于Java 与 C++ 套接字通信、DataInputStream 和 eof、二进制、加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2346134/

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