<span style="font-size:32px;color:#ff0000;">发送端:</span>
CSocket sockSrvr;
CSocket sockRecv;
BOOL m_connected;
void CFileSendDlg::OnBnClickedBtnStartsrv()
{
// TODO: 在此添加控件通知处理程序代码
sockSrvr.Create(888);
sockSrvr.Listen();
sockSrvr.Accept(sockRecv);
m_connected=TRUE;
}
void CFileSendDlg::OnBnClickedBtnSend()
{
// TODO: 在此添加控件通知处理程序代码
if(m_connected)
{
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;
}
WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(Dlg.GetPathName(),&FindFileData));
FindFileData.dwFileAttributes = FindFileData.dwFileAttributes;
FindFileData.ftCreationTime = FindFileData.ftCreationTime;
FindFileData.ftLastAccessTime = FindFileData.ftLastAccessTime;
FindFileData.ftLastWriteTime = FindFileData.ftLastWriteTime;
FindFileData.nFileSizeHigh = FindFileData.nFileSizeHigh;
FindFileData.nFileSizeLow = FindFileData.nFileSizeLow;
sockRecv.Send(&FindFileData,sizeof(WIN32_FIND_DATA));
UINT dwRead=0;
while(dwRead<FindFileData.nFileSizeLow)
{
byte* data = new byte[1024];
UINT dw=myFile.Read(data, 1024);
sockRecv.Send(data, dw);
dwRead+=dw;
}
myFile.Close();
sockRecv.Close();
AfxMessageBox("发送完毕!");
}
}
<span style="font-size:32px;color:#ff0000;">接收端:</span>
<pre name="code" class="cpp">CSocket sockClient;
CString szIP;
BOOL m_connected;
void CRecvFileDlg::OnBnClickedBtnConnect()
{
// TODO: 在此添加控件通知处理程序代码
AfxSocketInit(NULL);
sockClient.Create();
CString szIP;
GetDlgItemText(IDC_SERVERIP,szIP);
if(!sockClient.Connect((LPCTSTR)szIP, 888))
{
AfxMessageBox("连接到对方机器失败!");
return;
}
m_connected=TRUE;
}
void CRecvFileDlg::OnBnClickedBtnRecv()
{
// TODO: 在此添加控件通知处理程序代码
if(m_connected)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CString m_strPath;
<span style="white-space:pre"> </span>CString m_strFileName;
<span style="white-space:pre"> </span>WIN32_FIND_DATA StreamFileInfo;
<span style="white-space:pre"> </span>sockClient.Receive(&StreamFileInfo,sizeof(WIN32_FIND_DATA));
<span style="white-space:pre"> </span>m_strFileName=_T(StreamFileInfo.cFileName);
<span style="white-space:pre"> </span>m_ctrlProgress.SetRange32(0,StreamFileInfo.nFileSizeLow);
<span style="white-space:pre"> </span>CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "所有文件 (*.*)|*.*||", this);
<span style="white-space:pre"> </span>dlg.m_ofn.lpstrTitle = _T("另存为");
<span style="white-space:pre"> </span>strcpy(dlg.m_ofn.lpstrFile, m_strFileName.GetBuffer(m_strFileName.GetLength()));
<span style="white-space:pre"> </span>if(dlg.DoModal() == IDOK)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>m_strPath = dlg.GetPathName();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>CFile destFile(m_strPath, CFile::modeCreate|CFile::modeWrite| CFile::typeBinary);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>UINT dwRead = 0;
<span style="white-space:pre"> </span>while(dwRead<StreamFileInfo.nFileSizeLow)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>byte* data = new byte[1024];
<span style="white-space:pre"> </span>memset(data,0,1024);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>UINT dw=sockClient.Receive(data, 1024);
<span style="white-space:pre"> </span>destFile.Write(data, dw);
<span style="white-space:pre"> </span>m_ctrlProgress.SetPos(dwRead);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>dwRead+=dw;
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
<span style="white-space:pre"> </span>destFile.Close();
<span style="white-space:pre"> </span>SetFileAttributes(StreamFileInfo.cFileName,StreamFileInfo.dwFileAttributes);
<span style="white-space:pre"> </span>sockClient.Close();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>AfxMessageBox("接收完毕!");
<span style="white-space:pre"> </span>}
}
}