来自C++客户端的Java DataInputStream readInt()获得了巨大的价值

Java DataInputStream readInt() from C++ Client getting huge value

本文关键字:获得了 巨大 readInt C++ 客户端 Java DataInputStream 来自      更新时间:2023-10-16

我怀疑这与endianness有关,但我不确定如何修复它。我有一个C++客户端告诉Java服务器它将发送多少字节,而Java服务器只对输入流调用readInt()。然后服务器继续读取其余的数据。

目前,如果C++服务器调用:

char l = '3';
BytesSent = send( Socket, &l, 1, 0 );

那么对应的Java端是:

int lBytesSent = m_InDataStream.readInt();
m_AckNack = new byte[lBytesSent];
m_InDataStream.read(m_AckNack)

Bytes lBytesSsent往往是一些巨大的值,然后在创建数组时抛出异常(毫不奇怪)

C++套接字只需打开:

Socket = socket(AF_INET, SOCK_STREAM, 0);
Option = 1000;
setsockopt(Socket, SOL_SOCKET, SO_RCVTIMEO, (char *) &Option, sizeof(Option));
server.sin_family = AF_INET;
server.sin_port = htons(Port);
server.sin_addr.s_addr = INADDR_ANY;
memset(&(server.sin_zero), '', 8);
connect(Socket, (sockaddr*)&server, sizeof(server));

Java方面:

ServerSocket listener = new ServerSocket(port);
Socket server;
server = listener.accept();

为清楚起见,删除了错误检查。

任何建议都将是伟大的

非常感谢

标记

在发送数字(在C++端)之前,尝试通过htonl运行数字:

long x = htonl(42); /* x now contains 42 represented in network byte order */