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

我怀疑这与字节序有关,但我不确定如何修复它。 我有一个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) 

字节lBytesSent往往是一个巨大的值,然后在创建数组时抛出一个exception(毫不奇怪)

只需打开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(); 

删除错误检查以确保清晰。

任何建议都会很棒

非常感谢

标记

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

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