CSocket文件传输 分段传输的关键代码
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                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文件传输 分段传输的关键代码的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: listen函数与海量用户同时登陆
- 下一篇: 网络编程之shutdown() 与 cl
