【发布时间】:2010-10-15 01:01:25
【问题描述】:
在我之前的问题 (Why do I get weird results when reading an array of integers from a TCP socket?) 之后,我想出了以下代码,它似乎可以工作。代码示例适用于少量数组元素,但一旦变大,数据最终会损坏。
这是通过 TCP 发送 int 数组的代码:
#define ARRAY_LEN 262144
long *sourceArrayPointer = getSourceArray();
long sourceArray[ARRAY_LEN];
for (int i = 0; i < ARRAY_LEN; i++)
{
sourceArray[i] = sourceArrayPointer[i];
}
int result = send(clientSocketFD, sourceArray, sizeof(long) * ARRAY_LEN);
这是接收 int 数组的代码:
#define ARRAY_LEN 262144
long targetArray[ARRAY_LEN];
int result = read(socketFD, targetArray, sizeof(long) * ARRAY_LEN);
前几个数字很好,但在数组的下方,数字开始完全不同。最后,数字应该是这样的:
0
0
0
0
0
0
0
0
0
0
但他们实际上是这样出来的?
4310701
0
-12288
32767
-1
-1
10
0
-12288
32767
这是因为我使用了错误的发送/接收大小吗?
【问题讨论】:
-
顺便说一句,在发送之前将数组内容复制到本地数组变量中是没有意义的 - 这只是浪费内存和 CPU 周期。
-
当我尝试使用指针而不是复制到数组时,写入返回-1。这就是我使用复制到数组方法的原因。