Hi,
I am using socket to send data from local machine to remote in TCP, stream mode. The code in the local side is :
// ----------- Local
send(sd, pData, iSize, 0);  // send data
The size of the data is about 1Mb, so socket might divide it to several packets. While I am recieving the data on remote side, I have to recieve the data separately, and then combine them together. The code in the remote side is :
// ----------- Remote : Receiving data
int   iSizeThis(0);// size of a single separated data
static int  iSizeAcc(0);//size of the total data I have already got.
static int  iDataSize(0);// size of the original data.
// Get size
if (iDataSize <= 0)
{
    if ( (iSizeThis = recv(cli_sd, (char*)&iDataSize, 4, MSG_PEEK)) == 0) {
     ....
    } else if (iSizeThis == SOCKET_ERROR) {
     ....
    } else {
     // Allocates memory
     if (iDataSize > 0)
      pData = realloc(pData, iDataSize);
    }
} else if (iSizeAcc < iDataSize){
    // Get data.
    // The size of the data is about 1Mb, so socket will divide it to several packets.
    // I have to recieve the data separately, and then combine them together.
    iSizeThis = recv(cli_sd, ((char*)pData) + iSizeAcc, iDataSize - iSizeAcc, 0);
    iSizeAcc += iSizeThis;
    //{// If I uncomment this block, the recieving order will be reversed. Why?????
    // static int i(0);
    // std::ostringstream oss;
    // oss << i++ << "\n\n";
    // oss << "iSizeThis : " << iSizeThis << "\n";
    // oss << "iSizeAcc : " << iSizeAcc << "\n";
    // oss << "iDataSize : " << iDataSize << "\n";
    // ::MessageBoxA(this->GetSafeHwnd(), oss.str().c_str(), "---", 0);
    //}
    // If all the fragment are combined into pData, the save it to a file.
    if (iSizeAcc >= iDataSize){
     // Save to file
     FILE * pFile;
     pFile = fopen ("CCC.dat","wb");
     if (pFile != NULL){
      fwrite ( ((char*)pData)+4 , 1 , iDataSize-4 , pFile );
      fclose (pFile);
     }
     iSizeAcc = 0;
     iDataSize = 0;
    }
}
The odd thing is. If I uncomment the message block on remote side, the recieving order will be reversed. Thus, the result of the remote data is not in a correct order.
Why? (And how could I get the correct order of each fragment?)
Thanks in advance.