小编典典

来自C ++ Client的Java DataInputStream readInt()获得巨大价值

java

我怀疑这与字节序有关,但我不确定如何解决。我有一个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 lBytesSent往往是一个巨大的值,然后在创建数组时就会抛出异常(不足为奇)

只需使用以下命令打开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), '\0', 8);
connect(Socket, (sockaddr*)&server, sizeof(server));

而Java方面:

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

删除错误检查以提高清晰度。

任何建议都很好

非常感谢

标记


阅读 218

收藏
2020-11-30

共1个答案

小编典典

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

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