2014-04-27 111 views
0

我正在尋找一些將套接字接收到的數據寫入文件的有效方法。 現在即時通訊這樣做:從套接字讀取並寫入文件C++

if (!fStream.is_open()){ 
    cerr << "Unable to open file stream.\n"; 
    exit(EXIT_FAILURE); 
} 
char* recBuffer = new char [MAX_SIZE]; 

bzero(recBuffer, MAX_SIZE); 
ssize_t recieved; 
while ((recieved=read(s, recBuffer, MAX_SIZE))>0){ 
    fStream.write(recBuffer,MAX_SIZE); 
    bzero(recBuffer, MAX_SIZE); 
} 

問題這個實現的是......可以說,IM recieving文本文件,當我寫收到數據轉換成文件,文件中包含從內存的其餘部分收到數據+空值。如果我只寫收到計數,我只看到文件中的NULL。

PS的boost ::短耳是不是一個答案,我:(。

感謝

+0

你知道流緩存嗎?如果緩衝區沒有被刷新,實際上沒有寫入文件。您可能想在每次寫入之後刷新緩衝區以進行測試。如果你記得只寫「接收」字節,那麼'bzero'調用就不需要了。 –

回答

0

此行

fStream.write(recBuffer,MAX_SIZE); 

應該

fStream.write(recBuffer,received); 

而且不需要兩條線上的bzero

+0

正如我寫的我寫只接收計數,我只看到文件中的NULL。也許我在服務器端有bug ... – Smarty77

+1

你在服務器端可能有完全相同的錯誤。 – EJP