找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3975|回复: 5

ACE有无设计好的网络文件传输框架?

[复制链接]
发表于 2008-1-15 21:50:20 | 显示全部楼层 |阅读模式
我用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];    // 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有无设计好的端对端文件传输框架?
发表于 2009-6-22 19:56:15 | 显示全部楼层
我也在做,加油吧,我刚开始
发表于 2009-6-22 19:57:58 | 显示全部楼层
ACE_Asynch_Transmit_File,刚听说的,一起学习,一起进步
发表于 2009-6-22 20:18:01 | 显示全部楼层
看例子,$ACE_ROOT\examples\Reactor\Proactor\Test_proactor.cpp
有ACE_Asynch_Transmit_File的示例代码,
尽管使用ACE_Asynch_Transmit_File传单一文件十分高效,
不过由于文件是整体传完之后,系统再回调通知。
因此做类似于统计传输速度,断点续传等等一些列功能都比较麻烦。
发表于 2009-6-23 14:27:25 | 显示全部楼层
原帖由 modern 于 2009-6-22 20:18 发表
看例子,$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用起来更方便些。效率如何需要针对应用具体测,原理上应该都不差。
发表于 2009-6-23 18:57:45 | 显示全部楼层
呵呵,一个月前我也在做这个,加油,楼主
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 17:19 , Processed in 0.020033 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表