套接字文件传输

<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>}
}
}


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值