2013-07-09 38 views
1

我想通過TCP連接將數據流存儲到大型數組中,我該怎麼做?通過tcp將數據流存儲到大數組中的最佳方式是什麼?

我的代碼:

int iResult, count; 
int recvbuflen = 512; 
char buff[4096]={0}; 
char recvbuf[512] = {0}; 

................. 

count = 0; 

do { 

    iResult = recv(ClientSocket, recvbuf, recvbuflen, 0); 
    if (iResult > 0) { 

       count+=iResult; 

       //code to store in the buff[] array until reach to 4096 byte 
       //that's what i need 
       //for example: each time bind or add the recvbuf[] array at 
       //the end of buff[] array until reach to 4096 byte. 

       if(count == 4096) 
       { 
        //do the next process 
        count = 0; 
       } 
       } 
    }while(iResult > 0); 

任何幫忙。

+0

你有正確的原則,但你應該在循環的下一次迭代中收到'iResult'字節*少*。否則,你可能會在第一次調用(第一次迭代)時收到4095個字節,下一次調用時會收到4096個字節(下一次迭代),這不是你想要的。 –

+0

不,我知道這是接收的數據不超過4096字節。 –

+0

@abdo.eng2006210:否,每次最多可以接收512個字節,因此請準備好複製已收到字節後收到的字節數。通常,您還應該檢查總共可以收到超過4096個字節。 – stefaanv

回答

4

你可以很直接的recv到你的大緩衝區,並加一個偏移量每次:

iRes = recv(ClientSocket, (buff+offset), 4096-offset, 0); 

等等只要留意不溢出緩衝區。如果需要分別接收數據並根據內容將它們添加到緩衝區,只需將recvbuf memcpy到緩衝區(帶偏移量)。偏移量只是保持跟蹤,直到緩衝區已經填滿的點。再次注意緩衝區溢出。

+0

非常感謝你本傑明毛雷爾。 –

相關問題