关于BCB TClientSocket接收文件时从8K处截断的问题(接收不完整问题)

strcpy(sendBuf,asWrite.c_str());
sentCount = pClientStream->Write(sendBuf,strlen(sendBuf)+1);
if(sentCount==0){
     reMailInfo->Lines->Add("csDownLoad sentCount = 0 错误");
}else{
    //接收数据
   if(pClientStream->WaitForData(TIMEOUT)){
       recCount = pClientStream->Read(receiveBuf,RecMAXLENGTH);
       receiveBuf[recCount]=0;
       HTTPFileInfo = receiveBuf;

}

出现的问题,在普通电脑上,如果在WaitForData前面用::Sleep(5秒)时,在win7上面测试勉强可以接收10K的文件。但是当在win2008上面测试时,每次都出现只能接收8K的问题。查了一些资料。说是默认缓冲为8K。比较妥当的做法是分次接收。故而在接口上面增加一个参数来控制文件分段。多次接收并追加来写文件即可。测试:WaitForData前面不用放sleep。接收非常稳定。

接上,如上修改后,如果sleep(5)秒,仍然偶尔收到2-3k左右。最后改为每次1.5K左右。非常稳定。

你可能感兴趣的:(其他语言)