您的位置:首页 > 编程语言 > C语言/C++

vc 传输大文件

2016-09-06 01:00 525 查看
// TODO: Add your control notification handler code here
CFileDialog
Dlg(TRUE);
if(Dlg.DoModal()!=IDOK)
return;

CFile myFile;
if(!myFile.Open(Dlg.GetPathName(), CFile::modeRead | CFile::typeBinary))
{
AfxMessageBox("文件不存在!",MB_OK|MB_ICONERROR);
return;
}

CSocket sockSrvr;
sockSrvr.Create(800);

sockSrvr.Listen();
CSocket sockRecv;
sockSrvr.Accept(sockRecv);

SOCKET_STREAM_FILE_INFO
StreamFileInfo;
WIN32_FIND_DATA             FindFileData;

FindClose(FindFirstFile(Dlg.GetPathName(),&FindFileData));

    memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO));

    strcpy(StreamFileInfo.szFileTitle,myFile.GetFileTitle());

    StreamFileInfo.dwFileAttributes     =       FindFileData.dwFileAttributes;

    StreamFileInfo.ftCreationTime       =       FindFileData.ftCreationTime;

    StreamFileInfo.ftLastAccessTime     =       FindFileData.ftLastAccessTime;

    StreamFileInfo.ftLastWriteTime      =       FindFileData.ftLastWriteTime;

    StreamFileInfo.nFileSizeHigh        =       FindFileData.nFileSizeHigh;

    StreamFileInfo.nFileSizeLow         =       FindFileData.nFileSizeLow;

sockRecv.Send(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));

UINT dwRead=0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
UINT dw=myFile.Read(data, 1024);
sockRecv.Send(data, dw);
dwRead+=dw;
}
myFile.Close();

sockRecv.Close();
AfxMessageBox("发送完毕!");

------------------------------------------------------------------------------------------------------------------------------------------------------

AfxSocketInit(NULL);
CSocket sockClient;
sockClient.Create();

CString
szIP;
GetDlgItemText(IDC_EDIT_IPADDRESS,szIP);

if(!sockClient.Connect((LPCTSTR)szIP, 800))
{
AfxMessageBox("连接到对方机器失败!");
return;
}

SOCKET_STREAM_FILE_INFO StreamFileInfo;
sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));

CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);

UINT dwRead = 0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
memset(data,0,1024);

UINT dw=sockClient.Receive(data, 1024);
destFile.Write(data, dw);

dwRead+=dw;
}

SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,

                &StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
AfxMessageBox("接收完毕!");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++