当前位置: 首页 > 面试题库 >

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

姬振濂
2023-03-14
问题内容

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

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

任何建议都很好

非常感谢

标记


问题答案:

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

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


 类似资料:
  • 我的地图中存储了3个对象——每个都有几个MB。它们不会改变,所以在节点本地缓存它们是有意义的。这就是我在意识到平均获取延迟很大之前所做的,这大大减慢了我的计算速度。请看hazelcast控制台: 这让我想知道它是从哪里来的。我认为最初发生的是90和48次失误吗?这些计算是并行运行的,所以我认为它们都可以在条目被缓存之前发出一个reguest来获取,因此所有这些都不会从近缓存中受益。那么它是某种预加

  • 问题内容: 我需要从两个领域获得最大的价值: 现在,我如何从这两个中获得最大的价值? 问题答案: 您可能需要使用以下功能: 如果要从所有行中获取绝对最大值,则可能需要使用以下内容: 范例1: 范例2:

  • 问题内容: 我试图在Android中的HashMap上进行搜索,但出现问题: 考虑以下示例: 现在,我要对其进行迭代并获取每种颜色的值,并希望在“ Toast”中显示。如何显示? 问题答案:

  • 问题内容: 我正在从Angular的文档中查看此示例,但是我认为这可能总体上适用于Promise。下面的示例是从文档中逐字复制的,并附有评论: 我不清楚这是如何工作的。如果我可以调用第一个的结果并将它们链接起来(据我所知),那么它就是一个类型为Promise的对象。这不是一个。那么,“它的值将是promiseA的结果增加1”的含义是什么? 我应该以这种方式访问吗?成功回调如何返回承诺并返回“结果+

  • 问题内容: 给定这样的表,每个监视器的最新校准信息将是什么查询?换句话说,我想找到每个监视器的最大日期值。特定于Oracle的功能适合我的应用程序。 此示例的结果如下所示: 问题答案: 我倾向于使用解析函数 您也可以使用相关的子查询,尽管效率较低

  • 使用Redis流,我们可以有一些消费者没有完成的未决项目。我可以找到这样的项目,使用的命令。让我们有两个悬而未决的项目: 问题是,通过使用,我们可以仅基于id设置过滤器。我有一对夫妇的服务节点(,),这使得僵尸检查:他们每个人接收项目,他们使