gpt4 book ai didi

java - openssl java 到 c++ 读取 int 问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:17:34 25 4
gpt4 key购买 nike

我正在使用c++ ssl套接字服务器(32位linux)和基于java的ssl客户端(windows 64位)。SSL 握手成功。当我从Java客户端发送字符串数据到C++服务器时能够接收和显示。当我从 Java 客户端发送 int 数据到 C++ 服务器时,我收到不同的数据

Java发送源:

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
osw.writeInt(1000);
osw.flush();

C++ readInt 源代码:

unsigned int result =0;
int byteRead = SSL_read(m_ssl, &result, sizeof(int));
unsigned int rxdInt = htonl(result);

C++ 端,当我逐字节打印时读取的字节数:1

Expected: e8 03 00 00 
received : 00 00 00 00
after htonl: 00 00 00 00

使用下面的代码,以字节形式编写,它与 C++ 一起使用

ByteBuffer bb = ByteBuffer.allocate(4); 
bb.putInt(1000);

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.write(bb.array());
dos.flush();

没有 SSL writeInt 可以与 C++ 一起使用SSL writeInt 不起作用使用 SSL,将 int 写为字节工作。为什么 writeInt 行为在 SSL 情况下不同?

最佳答案

为什么使用Writer来存储二进制数据?您应该使用DataOutputStream.writeInt()

当然还有这个:

unsigned int rxdInt = htonl(result);

应该是这样的:

unsigned int rxdInt = ntohl(result);

并且您忽略了 SSL_read() 返回的值,该值可能是 -1、零或小于 4。

关于java - openssl java 到 c++ 读取 int 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46927316/

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