이전 질문 (Why do I get weird results when reading an array of integers from a TCP socket?)에 이어 다음 코드를 제안했습니다. 작동하는 것처럼 보입니다. 코드 샘플은 적은 수의 배열 요소에서 잘 작동하지만 일단 커지면 데이터가 끝까지 손상됩니다.TCP를 통한 int 배열을 보낼 때 첫 번째 값만 정확합니다.
이 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이 반환됩니다. 이것이 복사 방법을 사용하는 이유입니다. –