社区
网络编程
帖子详情
文件的分段传输
passenger728
2008-06-01 12:22:21
我做了一个关于文件传输的程序,但是只能传送几十兆以内的小型文件,我想通过文件分段传输实现大型文件的传输,希望大家帮帮忙!先谢了。
...全文
478
15
打赏
收藏
文件的分段传输
我做了一个关于文件传输的程序,但是只能传送几十兆以内的小型文件,我想通过文件分段传输实现大型文件的传输,希望大家帮帮忙!先谢了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
clakcenter
2011-11-03
打赏
举报
回复
能把你这段分块传输的代码贴出来吗?我现在就是遇到这个问题了请指教
passenger728
2008-06-10
打赏
举报
回复
问题自己解决了,还是感谢各位的指点。
na_he
2008-06-04
打赏
举报
回复
看看思路了,呵呵!
NGCMDHEADER header;
status stsCode = statusOk;
FILE* fp = NULL;
// Open file
fp = fopen(strFileName.c_str(), "rb");
if (fp == NULL)
{
return statusCreateFileError;
}
//
char szDataBuf[MAX_DATABUF_LEN];
size_t dwItem = 0;
//
header.dwCmd = CMD_FDDATA;
// Send file data
while (true)
{
dwItem = fread(szDataBuf, sizeof(char), MAX_DATABUF_LEN, fp);
header.dwBufLen = dwItem;
stsCode = socket.SendExact((char*)&header, sizeof(header));
if (stsCode != statusOk)
{
break;
}
stsCode = socket.SendExact(szDataBuf, dwItem);
if (stsCode != statusOk)
{
break;
}
if (dwItem < MAX_DATABUF_LEN)
{
header.dwCmd = CMD_FDEND;
header.dwBufLen = 0;
stsCode = socket.SendExact((char*)&header, sizeof(header));
LogFileTransferInfo(LOG_FILE, strFileName, ts.nCurFileTransferedSize);
break;
}
// update information
ts.nCurFileTransferedSize += header.dwBufLen;
SendMessage(GetMsgProcHwnd(), WM_TASK_STATUS_UPDATE, STATUS_UPDATE_FILE, (LPARAM)&ts);
}
// Close file & socket
fclose(fp);
char Ext[6];
char szFileName[MAX_PATH];
strcpy(szFileName,strFileName.c_str());
_GetFileExtName(szFileName,Ext);
if( strcmp(Ext,".NSOFT") ==0 )
{
::DeleteFile(szFileName);
}
return stsCode;
}
rageliu
2008-06-04
打赏
举报
回复
file.open(filename,ios::binary); 确定路径正确,除了2进制,带必要的读写参数
9527他大爷
2008-06-03
打赏
举报
回复
一小块一小块从文件读,再发送出去再读
逃逃VS海
2008-06-03
打赏
举报
回复
up 学习用
passenger728
2008-06-03
打赏
举报
回复
[Quote=引用 7 楼 cnzdgs 的回复:]
我在做文件操作时一般都是用API的,不过CFile应该也没问题,你是open的时候返回false吗?
[/Quote]
文件open的时候没有返回false,只是卡住不动了。
passenger728
2008-06-03
打赏
举报
回复
[Quote=引用 7 楼 cnzdgs 的回复:]
我在做文件操作时一般都是用API的,不过CFile应该也没问题,你是open的时候返回false吗?
[/Quote]
打开的时候没有显示失败,只是卡住不动了。
僵哥
2008-06-02
打赏
举报
回复
为什么不用API?
cnzdgs
2008-06-02
打赏
举报
回复
我在做文件操作时一般都是用API的,不过CFile应该也没问题,你是open的时候返回false吗?
僵哥
2008-06-02
打赏
举报
回复
API可以查MSDN
CreateFile打开文件
SetFilePointer(相当于seekoff)
ReadFile读文件
CloseHandle关闭文件句柄。
passenger728
2008-06-02
打赏
举报
回复
[Quote=引用 4 楼 unsigned 的回复:]
为什么不用API?
[/Quote]
你能帮我改一改吗,或用API帮我写一个,谢谢 。
僵哥
2008-06-01
打赏
举报
回复
找出“只能传送几十兆以内”的原因。
分包,其实就是一次从文件当中读一块(由于网络的速度是有限的,所以没有任何必要把整个文件几十几百兆一次性读入内存,这个内存消耗是非必要的),然后发送,再读一块。一般只要保留文件的句柄就不需要作任何动作,直接readfile就可以(读文件的时候也不可能是你想读多少就一定能给你读取出来的,而是通过返回值告诉你读取了多少,此时你可能需要继续读取,而你也可以先把读完的发送了,再继续读取。
另外文件也可以通过seek或者SetFilePointer设置文件指针,于是你就可以在任意时间里进行选择性地发送某一段或某几段。
passenger728
2008-06-01
打赏
举报
回复
我对文件分段了,代码如下,在程序运行的时候只能打开4096k以下的文件(我把文件分成4096一块)。
length=strlen(sFname); //获取文件名长度
//发送文件名长度
sendmessage(csock,(const char*)&length,sizeof(int));
//发送文件名
sendmessage(csock,sFname,length);
file.open(filename,ios::binary); //用二进制打开文件
if(file.fail())
{
MessageBox("文件打开失败!");
goto EXIT;
}
fb=file.rdbuf();
length=fb->seekoff(0,ios::end,ios::in)-fb->seekoff(0,ios::beg,ios::in);
fb->seekoff(0,ios::beg,ios::in); //获取文件长度
//发送文件大小
sendmessage(csock,(const char*)&length,sizeof(int));
bRet=TRUE;
char data[4097];
while(length>0)
{
int len=0;
if(length <= 4096)
{
len = length;
}
else
{
len = 4096;
}
//准备缓冲区
// data=new char[len];
file.read(data,len);
// data[length] = '\0';
//发送整个文件
bRet=sendmessage(csock, data, len);
length -= len;
// delete[] data;
}
file.close();
if(bRet){
// MessageBox("发送成功!");
}
else{
MessageBox("发送失败!");
}
希望大家不吝指教。谢谢!
cnzdgs
2008-06-01
打赏
举报
回复
简单点的方式,用TCP协议建立连接,打开文件,做一个循环,每次读一小段数据,发送出去,再循环。
大
文件
分段
传输
与存储技术实现方案-
分段
传输
大
文件
处理存储优化数据分块断点续传并发处理
文件
校验分布式存储网络
传输
优化负载均衡-用于解决大
文件
上传下载过程中的网络不稳.zip
大
文件
分段
传输
与存储技术的实现,提供了一种高效可靠的解决方案。该技术通过对大
文件
进行合理
分段
,可以将一个大
文件
分解成多个小块,然后分别进行上传和下载。
分段
传输
的优势在于,即使在
传输
过程中网络出现问题,...
Android笨重
文件
分段
传输
在标题"android大
文件
分段
上传"中提到的方法,是通过使用Socket流将大
文件
分段
进行上传,这是一种有效应对大
文件
传输
问题的策略。下面我们将详细探讨这一技术。了解Socket的基本概念。Socket是网络编程中的一个接口...
android大
文件
分段
上传
在标题"android大
文件
分段
上传"中提到的方法,是通过使用Socket流将大
文件
分段
进行上传,这是一种有效应对大
文件
传输
问题的策略。下面我们将详细探讨这一技术。 首先,了解Socket的基本概念。Socket是网络编程中的...
C#socket 大
文件
传输
分段
传输
C#DEMO
C#socket 大
文件
传输
分段
传输
C#DEMO
前端
分段
传输
大
文件
组件,基于HTML5 File API、Blob,后端采用node接收
文件
.zip
前端实现大
文件
分段
上传的基本流程如下: 1. 用户选择大
文件
。 2. 使用File API将大
文件
切分为多个Blob段。 3. 对每个Blob段创建一个FormData对象,并附加到POST请求中。 4. 使用XMLHttpRequest或fetch API异步发送...
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章