ACE有无设计好的网络文件传输框架?
我用ACE写了个简单的网络文件传输模块,发送端用WINDOWS API "TransmitFile()"发送文件,接受端用ACE_Sock_Stream::recv_n接受文件,大体代码如下:// 发送端
//..............
OVERLAPPED ov;
memset(&ov,0,sizeof(OVERLAPPED));
HANDLE hEvent = CreateEvent(0,FALSE,FALSE,0);
ov.hEvent = hEvent;
TransmitFile((SOCKET)pRemoteStream->get_handle(),hFile,0,everySendBytes,&ov,0,TF_USE_KERNEL_APC);
int waitRet = WaitForSingleObject(hEvent,maxWaitTime);
CloseHandle(hEvent);
if(waitRet == WAIT_TIMEOUT)
{
CloseHandle(hFile);
return FALSE;
}
//..............
// 接受端
//..............
BOOL bRet;
BYTE * pBuffer = new BYTE; // fileSize问发送端发送的文件的大小
ACE_OS::last_error(0);
int recvBytes = pRemoteStream->recv_n(pBuffer,fileSize,0,&ACE_Time_Value(maxWaitSeconds));
int lastError = ACE_OS::last_error();
if(recvBytes == fileSize)
{
bRet = TRUE;
}
else
{
if(lastError == ETIME)
{
// 这个错误经常会发生,不知道是怎么回事
TRACE(_T("data is not received all for out of time : %dsc, %dbytes,%dbytes"),maxWaitSeconds,recvBytes,fileSize);
}
else
{
TRACE(_T("data is not received all for other reason,errorCode : %d"),lastError);
}
bRet = FALSE;
}
//..............
但我写的程序在接受端经常会超时而没有接受到完成的文件数据,我也不知道怎么回事,现在有谁能告诉我ACE有无设计好的端对端文件传输框架? 我也在做,加油吧,我刚开始 ACE_Asynch_Transmit_File,刚听说的,一起学习,一起进步 看例子,$ACE_ROOT\examples\Reactor\Proactor\Test_proactor.cpp
有ACE_Asynch_Transmit_File的示例代码,
尽管使用ACE_Asynch_Transmit_File传单一文件十分高效,
不过由于文件是整体传完之后,系统再回调通知。
因此做类似于统计传输速度,断点续传等等一些列功能都比较麻烦。 原帖由 modern 于 2009-6-22 20:18 发表 http://www.acejoy.com/bbs/images/common/back.gif
看例子,$ACE_ROOT\examples\Reactor\Proactor\Test_proactor.cpp
有ACE_Asynch_Transmit_File的示例代码,
尽管使用ACE_Asynch_Transmit_File传单一文件十分高效,
不过由于文件是整体传完之后,系统再回调通知。
因此做类 ...
这个例子演示了两种方式:ACE_Asynch_Transmit_File和proactor
都是不错的,ACE_Asynch_Transmit_File用起来更方便些。效率如何需要针对应用具体测,原理上应该都不差。 呵呵,一个月前我也在做这个,加油,楼主
页:
[1]