pango 发表于 2008-1-15 21:50:20

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有无设计好的端对端文件传输框架?

stuarts 发表于 2009-6-22 19:56:15

我也在做,加油吧,我刚开始

stuarts 发表于 2009-6-22 19:57:58

ACE_Asynch_Transmit_File,刚听说的,一起学习,一起进步

modern 发表于 2009-6-22 20:18:01

看例子,$ACE_ROOT\examples\Reactor\Proactor\Test_proactor.cpp
有ACE_Asynch_Transmit_File的示例代码,
尽管使用ACE_Asynch_Transmit_File传单一文件十分高效,
不过由于文件是整体传完之后,系统再回调通知。
因此做类似于统计传输速度,断点续传等等一些列功能都比较麻烦。

wishel 发表于 2009-6-23 14:27:25

原帖由 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用起来更方便些。效率如何需要针对应用具体测,原理上应该都不差。

wupeter1 发表于 2009-6-23 18:57:45

呵呵,一个月前我也在做这个,加油,楼主
页: [1]
查看完整版本: ACE有无设计好的网络文件传输框架?