找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 8284|回复: 10

ACE_Proactor如何传送大文件

[复制链接]
发表于 2009-9-28 11:35:32 | 显示全部楼层 |阅读模式
ACE_Proactor框架中,如何传送大文件?
 楼主| 发表于 2009-10-9 09:51:01 | 显示全部楼层

急, ACE_Proactor如何传送大文件?

版主,在ACE_Proactor框架下,如何传送几百兆的大文件?
发表于 2009-10-9 10:55:32 | 显示全部楼层
直接传就成了,楼主一兆大小的文件平时怎么传的
 楼主| 发表于 2009-10-9 17:05:27 | 显示全部楼层
你说的直接传,是用Initialize_write?还是用transmit_file?
我要传的文件都在50兆以上。
我都是用Initialize_write传,现在用Initialize_write传输的时候,涉及到传送的大小大于writebuffer时,就出错。请问,你有例子吗?
发表于 2009-10-9 17:11:31 | 显示全部楼层
贴代码出来吧,Initialize_write,writebuffer都是啥东西呀!
 楼主| 发表于 2009-10-9 17:17:16 | 显示全部楼层
m_mbFileBuffer.init(65536);

void TransmitFileToServer(char *pFileName)
{
        if(pFileName == NULL)
                return -1;
       
        FILE *pFile = fopen(pFileName, "rt");
        if(pFile == NULL)
                return -1;
       
        size_t fileSize = 0;
        size_t readSize = 0;
        size_t offset = 0;
        fseek(pFile, 0, SEEK_END);
        fileSize = ftell(pFile);
        fseek(pFile, 0, SEEK_SET);

        for(offset = 0; offset < fileSize; offset += readSize)
        {
                m_mbFileBuffer.rd_ptr(m_mbFileBuffer.base());
                readSize = fread(m_mbFileBuffer.base(), 1, m_mbFileBuffer.size() - 1, pFile);
                fseek(pFile, readSize, SEEK_CUR);
                m_mbFileBuffer.wr_ptr(readSize);
                if(m_ws.write(m_mbFileBuffer, readSize) == -1)
                {
                        break;
                }
        }

        fclose(pFile);

        return 0;
}
 楼主| 发表于 2009-10-9 17:18:47 | 显示全部楼层
看看这段代码有什么问题?
 楼主| 发表于 2009-10-9 17:19:38 | 显示全部楼层
这段代码如果传送30M的文件就会出错
 楼主| 发表于 2009-10-9 17:26:13 | 显示全部楼层
版主帮我看看啊,我这边项目很急。谢谢了
 楼主| 发表于 2009-10-10 09:08:00 | 显示全部楼层
版主modern:
帮我看看啊,我贴的代码有什么问题?
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-23 16:16 , Processed in 0.014873 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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