来自C++客户端的Java DataInputStream readInt()获得了巨大的价值
Java DataInputStream readInt() from C++ Client getting huge value
我怀疑这与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 */
相关文章:
- 如何检查函数是否真的获得了定义为 const 的变量?
- 我似乎无法理解我的代码出了什么问题,我无法获得输出
- 为什么我在有关文件编码格式的QT代码中获得了混乱的代码
- 在C 中,Harversine Forumla获得了错误的结果
- C++从结构的数组中获得了错误的值
- C :转换为int和添加时,我的角色数组获得了奇怪的值
- 我在SFML SF :: Renderwindow中获得了黑屏
- magick 获得像素颜色.PixelPacket似乎不再存在了
- 数据结构:我获得了不希望的价值
- 我从std :: multimap.lower_bound获得了无效的指针
- 为什么这个C++程序的输出在cmd中产生了巨大的混乱
- windeployqt错过了一些库,而获得了其他不需要的库
- 即使通过const_cast更改了const变量,也能获得相同的const变量值
- 来自C++客户端的Java DataInputStream readInt()获得了巨大的价值
- 重载>>时未获得预期值。我在这里做错了什么?
- 设置了LARGEADDRESSAWARE标志的应用程序获得较少的虚拟内存
- 关闭了垂直同步,但在我的DirectX 9应用程序中仍然可以获得60FPS
- 由于在main函数之前创建了全局对象,因此从rand()中获得了完全相同的结果
- 为什么一个程序开始时很慢,但后来获得了全速
- c++仅用一行代码就实现了巨大的性能差异