vc 传输大文件

// 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("接收完毕!");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值