지금 어제 오전부터 이 시간까지 안드로이드에 네이티브 소켓을 작성 중인데, 난감한게 많네..

다른 건 어케 해결되었는데, 이상한게 있어서 좀 물어보자.


* 델파이로 서버 만들어서 안드로이드로 패킷을 [int size][data] 형식으로 보내고 있음.

* 특정 크기 미만인 경우 잘 동작하나, 순간적으로 특정 크기를 넘으면 가비지가 생기는 듯 함.  보낸 데이터를 다 읽고 없는 데이터를 또 읽음

* 작은 데이터를 간격을 두고 보내면 잘 처리됨.  아주 작은 데이터는 특정 크기만큼 순간적으로 보내도 처리됨.

   아마도 루프 돌면서 보내는 동안 패킷이 조각나서 전송되었을 거 같음.

* 스마트 폰에서는 그 크기가 1400 바이트 언저리, 우분투에서는 2048 (이넘은 정확하게 재 봄)


클라이언트 소켓은 C로 블로킹하여 사용 중..


아래는 그 소스의 일부분,


if (pHandle->socket > 0) {

// Size를 수신했고, 그 크기가 0보다 크거나 같고 1MB보다 작거나 같아야 한다.

int isSizeReceived =

(recv(pHandle->socket, &pHandle->pBuffer->size, sizeof(pHandle->pBuffer->size), 0) > 0) &&

(pHandle->pBuffer->size >= 0) &&

(pHandle->pBuffer->size <= _PacketSizeLimit);


if (isSizeReceived) {

if (pHandle->pBuffer->size > 0) {

if (recv(pHandle->socket, &pHandle->pBuffer->dataStart, pHandle->pBuffer->size, 0) > 0) {

pResult = copyDataPacket(pHandle->pBuffer);

} else {

// 필요 없는 코드 그러나 확실하게 명시하기 위함

pResult = NULL;

}

} else {

pResult = copyDataPacket(pHandle->pBuffer);

}

}


// 수신 오류 발생

if (pResult == NULL) do_Disconnect(pHandle);

}