Следуя моему предыдущему вопросу (Why do I get weird results when reading an array of integers from a TCP socket?), я придумал следующий код, который, похоже, работает. Образец кода хорошо работает с небольшим количеством элементов массива, но как только он становится большим, данные коррумпированы к концу.При отправке массива int по TCP, почему только первая сумма правильная?
Это код, чтобы отправить массив междунар через 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
Это потому, что я использую неправильный размер отправки/получения?
Кстати, нет смысла копировать содержимое массива в переменную локального массива перед отправкой - это просто трата памяти и циклов процессора. –
Когда я попытался использовать указатель вместо копирования в массив, напишите return -1. Вот почему я использую метод copy to array. –