【发布时间】:2016-03-30 03:37:41
【问题描述】:
我正在编写一个使用套接字从 C 程序接收数据的 Java 程序。
C 程序 malloc 一个整数数组以适应要放入其中的元素的数量。例如:{111,2,2,2,3,3}(111 只是一个消息头),所以 int[] 大小为 6。(我们在发送完成后释放数组,返回值为 0,即是成功)。我们打印出数组的内容,一切都按预期显示:111,2,2,2,3,3
但是,我们意识到在 Java 中,我们需要在从输入流读取之前添加一个小的延迟,否则我们无法获得正确的值。例如。如果我们不在输入流可用之前放置 Thread.sleep(2000),Java 接收到的值就像 111,0,0,0,3,3 (例如,值 2 丢失)
1) 如果我在 C 中发送 int 数组并要求 Java 通过 int 读取 int 是否会影响 Java?
2) 为什么延迟会使数据准确?我们尝试使用 1000,1500,但只有 2000 给出最稳定的结果
3) 如果在 SomeAction.class 中,我会忙着等待:
while (!pcClient.readMessage());
或
while (!pcClient.readMessage()) {}
它只执行一次while循环然后就爆发了?而如果我在下面这样做,它会按预期工作:
while (!pcClient.readMessage()) {System.out.print("");}
【问题讨论】:
-
可以分享C代码吗?
-
我不擅长C,但我认为
sizeof msg_queue是指针的大小,而不是int的大小。不是吗?在这种情况下,它可能是 8 而不是 4 -
@bedrin 当我尝试执行 printf("%d, %d", count, sizeof msg_queue);在 malloc 上方,它显示 6, 4