2014-04-27 53 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