Следуя моему предыдущему вопросу ( Почему я получаю странные результаты при чтении массива целых чисел из сокета TCP? ), я пришел к следующему коду, который, кажется, работает, вроде. Пример кода хорошо работает с небольшим количеством элементов массива, но как только он становится большим, данные повреждены к концу.
Это код для отправки массива int по TCP:
#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
Это потому, что я использую неправильный размер отправки / получения?