CSocket文件传输 分段传输的关键代码
分段传输的关键代码
struct FILEINFO
{
int fileLength; //文件长度
char fileName[100]; //文件名
};
|
服务器:
CFileDialog fileDialog(TRUE); //选择文件
if (fileDialog.DoModal()==IDOK)
{
CString filename = fileDialog.GetPathName(); //文件路径
CString name = fileDialog.GetFileName(); //文件名字
//发送文件
CFile file;
if (file.Open(filename,CFile::modeReadWrite|CFile::typeBinary))
{ //打开文件
FILEINFO myFileInfo; //文件结构
int length = file.GetLength(); //获取文件的长度
m_CtrlProgressSend.SetRange32(0,length); //设置进度条大小
m_CtrlProgressSend.SetPos(0);
myFileInfo.fileLength = length; //赋值文件长度
strcpy (myFileInfo.fileName,name.GetBuffer(name.GetLength())); //拷贝文件名
name.ReleaseBuffer(); //释放buffer
int iBufSize = 1024*5; //设置文件缓冲区长度
int iSize = iBufSize ; //一次读取的长度
LPBYTE pBuf= new BYTE [iBufSize]; //定义缓冲区
m_sockClient.Send(&myFileInfo, sizeof (myFileInfo)); //发送文件头信息
//发送文件
int iNnmByte;
UINT uiTotal = 0 ;
while (uiTotal<length)
{
if (length-uiTotal < iBufSize) //如果发送小于1024*5 ,则发送剩余那些....
iSize = length-uiTotal;
iSize = file.Read(pBuf,iSize); //读取文件到缓冲区
iNnmByte = m_sockClient.Send(pBuf,iSize); //发送剩下iSize-iCount的文件
uiTotal += iNnmByte; //uiTotal总发送量
m_CtrlProgressSend.SetPos(uiTotal);
}
}
m_info.ReplaceSel( "发送文件完毕\r\n" );
file.Close();
}
m_CtrlProgressSend.SetPos(0);
}
|
客户端
FILEINFO myFileInfo;
m_client.Receive(&myFileInfo, sizeof (myFileInfo)); //接受文件信息
m_progress.SetRange32(0,myFileInfo.fileLength); //设置进度
CString str;
str.Format(myFileInfo.fileName); //文件名字
CFile file;
if (file.Open(str,CFile::modeCreate|CFile::modeWrite))
{
UINT uiLength;
uiLength = myFileInfo.fileLength ; //文件长度
int iBufSize = 1024*5;
int iSize = iBufSize ;
LPBYTE pBuf = new BYTE [iBufSize];
int iNumByte;
UINT uiTotal = 0 ;
while (uiTotal < uiLength)
{
if (uiLength-uiTotal<iBufSize)
iSize = uiLength - uiTotal ;
iNumByte = m_client.Receive(pBuf,iSize);
file.Write(pBuf,iNumByte); //写入文件
uiTotal+=iNumByte;
m_progress.SetPos(uiTotal);
}
if (pBuf)
{
delete [] pBuf;
pBuf = NULL;
}
}
file.Close();
m_info.ReplaceSel( "接受文件成功\r\n" );
m_progress.SetPos(0);
|
CSocket文件传输 分段传输的关键代码相关推荐
- python twisted框架_Python 基于Twisted框架的文件夹网络传输源码
由于文件夹可能有多层目录,因此需要对其进行递归遍历. 本文采取了简单的协议定制,定义了五条命令,指令Head如下: Sync:标识开始同步文件夹 End:标识结束同步 File:标识传输的文件名(相对 ...
- linux telnet 传文件命令,telnet 传输文件
用python创建个临时服务器,发送文件供telnet访问 import socket import base64 port = 10005 filename = 'libcrypto.so.1.0. ...
- Dubbo系统里面MultipartFile文件传输问题Dubbo文件上传/传输服务
今天遇到一个问题,在Controller 层里面,直接使用MultipartFile 来接收上传的图片,遇到几个坑. 一.在spring配置文件里面配置文件上传 <!--文件上传-->&l ...
- 局域网文件文本在线传输助手
局域网文件文本在线传输助手 具体实现代码链接 下面我将详细记录,我在完成该项目涉及的具体问题的具体分析实现. 要进行局域网通信首先要做的就是客户端和局域网建立链接. 链接过程 服务器端是无法知道都有哪 ...
- Java 文件传输小工具,网络传输文件,内网传输
文件传输小工具,网络传输文件,内网传输 换了一台电脑,想把一台电脑的资料放到另一太电脑上,由于没有太大的U盘就动手用Java写了个小工具.有需要的朋友下载使用! 运行环境 运行环境需要安装JDK,并配 ...
- 鲁班编程语言 文件读写,网络传输及解释器使用指南(转)
鲁班编程语言 文件读写,网络传输及解释器使用指南(转) http://project.soft114.com/lubankit/index_chinese.html 9. 输入输出对象类型及部件 Me ...
- linux tar打包大文件并分割传输另一台linux服务器
场景 将linux服务器A中的数据文件迁移到linux服务器B,当文件很大的之后,压缩直接传输会出现传输很久,且中间一段暂停,又得重新上传.这时候需要可以将压缩的文件的分割传输然后解压合并. linu ...
- linux命令——scp 两台linux机器间文件或目录传输
不同的Linux之间copy文件常用有3种方法: 第一种:ftp,也就是其中一台Linux安装ftpServer,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种:采用sam ...
- linux与window文件通过串口传输方法(zmod传输方法)
我们在调试linux产品时,有的产品没有网口,只有串口.这时nfs,tfp都用不了.只能用串口来传输文件. 把windows上文件通过串口传输到开发板上. 开发板和电脑通过串口连接. 2.使用Moba ...
最新文章
- 巴奴与海底捞的战争背后,“单品即品牌”战略到底香不香?
- pg数据库开启远程连接_Postgresql开启远程访问的步骤全纪录
- 应用软件更新提醒单页HTML网站源码
- undefined reference to `dlclose‘问题解决方法
- Windows10安装Matlab 2018b教程
- 利用html+javascript开发桌面软件
- 卧槽!AI 质检竟然还能这么玩???
- Java笔记 - 黑马程序员_03(继承,修饰符,多态,抽象类,接口,内部类)
- 携程Java后台开发面经
- 何恺明 matlab,[论文复现]何恺明博士CVPR2009去雾算法(1)
- 【趣味案例】用Python来做一个屏幕录制工具
- Molecular weight相对分子质量
- FPGA设计经验之图像处理
- 计算机打印unknow,系统安装打印机驱动提示unknown device解决方法
- 关于获取微信小程序码的“47001”错误码的坑
- (更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 20-性能优化-系统配置
- 青岛理工大学计算机基础考试,学校召开2019年下半年全国计算机等级考试考务协调会...
- 1412: [ZJOI2009]狼和羊的故事 最小割
- 西软点菜系统服务器设置,西软酒店管理系统软件客户端安装使用教程.docx
- 真的了解Cookie吗 - Cookie详解