CSocket文件传输 分段传输的关键代码
2011-08-24 16:44
417 查看
分段传输的关键代码
服务器:
客户端
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文件传输 分段传输的关键代码
- CSocket文件传输 分段传输的关键代码
- QT使用UDP方式传输文件的关键代码
- U-Boot第一阶段关键代码理解(绿色加粗为自己添加)
- ErrorLookUp关键代码
- c++实现文件传输之四:断点传输
- 微信小程序-贪吃蛇关键代码
- 各种数据库连接URL关键代码
- java 文件传输 分块传输
- NRF24L01多对一、多通道通讯关键代码
- java 开发设计 小游戏 英雄 怪物 武器 关键代码
- TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
- 【代码练习7】UPD协议传输练习
- 用C#代码以Post方式提交页面,与信息传输安全性
- 制作自己的QQ登陆器的关键代码
- 飞秋文件传输模拟实现代码
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- Java解压zip文件的关键代码
- KEIL MDK编译代码,产生的几个关键信息:Code RO-data RW-data ZI-data
- Git学习:利用Git和TortoiseGit把代码传输到网络服务器