www.pudn.com > mini_remote.zip > DownLoadDlg.cpp


// DownLoadDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "MainCtrl.h" 
#include "DownLoadDlg.h" 
 
void DownLoadFile(void *m_Dlg) 
{ 
	CDownLoadDlg *dlg = (CDownLoadDlg *)m_Dlg; 
	COMMAND_MSG msg; 
	memset(&msg,0,sizeof(COMMAND_MSG)); 
	msg.msg_id = CMD_DOWNLOADFILE; 
	strcpy(msg.wParam,dlg->m_remotefile.GetBuffer(0)); 
	msg.lParam=dlg->dwExtinationPort; 
	while(1) 
	{ 
		int nRet=send(dlg->m_hConnectSocket,(char *)&msg,sizeof(msg),NULL); 
		if(nRet==SOCKET_ERROR) 
		{ 
			if(WSAGetLastError()==WSAEWOULDBLOCK) 
			{ 
				Sleep(50); 
				continue; 
			} 
			else 
			{ 
				return; 
			} 
		} 
		else break; 
	} 
 
	SOCKET hServerSocket = socket(PF_INET,SOCK_STREAM,0); 
	SOCKET hClientSocket = INVALID_SOCKET; 
	SOCKADDR_IN sockAddr; 
	memset(&sockAddr,0,sizeof(sockAddr)); 
	sockAddr.sin_family = AF_INET; 
	sockAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
	sockAddr.sin_port = htons((u_short)dlg->dwExtinationPort); 
	bind(hServerSocket,(SOCKADDR*)&sockAddr, sizeof(sockAddr)); 
	if (listen(hServerSocket,1)==SOCKET_ERROR) 
	{ 
		closesocket(hServerSocket); 
		dlg->SetDlgItemText(IDC_SHOW,"!!!下载出错!!!"); 
		return; 
	} 
	hClientSocket = accept(hServerSocket,NULL,NULL); 
	closesocket(hServerSocket); 
	if (hClientSocket==INVALID_SOCKET) 
	{ 
		dlg->SetDlgItemText(IDC_SHOW,"!!!下载出错!!!"); 
		return; 
	} 
	// 
	dlg->isTranslating = TRUE; 
	FILE* f=fopen(dlg->m_localfile.GetBuffer(0),"wb"); 
	if (f==NULL) 
	{ 
		closesocket(hClientSocket); 
		dlg->SetDlgItemText(IDC_SHOW,"!!!下载出错!!!"); 
		return; 
	} 
	FILETRASFER_MSG fmsg; 
	while(1) 
	{ 
		memset(&fmsg,0,sizeof(FILETRASFER_MSG)); 
		int nRet=recv(hClientSocket,(char *)&fmsg,sizeof(FILETRASFER_MSG),NULL); 
		if(nRet==SOCKET_ERROR) 
		{ 
			if(WSAGetLastError()==WSAEWOULDBLOCK) 
			{ 
				Sleep(50); 
				continue; 
			} 
			else 
			{ 
				dlg->SetDlgItemText(IDC_SHOW,"!!!下载出错!!!"); 
				break; 
			} 
		} 
		else 
		{ 
			if (fmsg.isEnd) 
			{ 
				dlg->SetDlgItemText(IDC_SHOW,"!!!下载完毕!!!"); 
				break; 
			} 
			fwrite(fmsg.wParam,fmsg.dwFinger,1,f); 
		} 
	} 
	closesocket(hClientSocket); 
	fclose(f); 
	return; 
} 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CDownLoadDlg dialog 
 
 
CDownLoadDlg::CDownLoadDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CDownLoadDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDownLoadDlg) 
	m_localfile = _T(""); 
	m_remotefile = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
 
void CDownLoadDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDownLoadDlg) 
	DDX_Control(pDX, IDOK, m_btn_ok); 
	DDX_Control(pDX, IDC_REMOTEFILE, m_edit_2); 
	DDX_Control(pDX, IDC_LOCALFILE, m_edit_1); 
	DDX_Control(pDX, IDC_FINDFILE, m_btn_1); 
	DDX_Text(pDX, IDC_LOCALFILE, m_localfile); 
	DDX_Text(pDX, IDC_REMOTEFILE, m_remotefile); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CDownLoadDlg, CDialog) 
	//{{AFX_MSG_MAP(CDownLoadDlg) 
	ON_BN_CLICKED(IDC_FINDFILE, OnFindfile) 
	ON_WM_TIMER() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDownLoadDlg message handlers 
 
BOOL CDownLoadDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	m_btn_1.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4); 
	m_btn_1.SetFontColor(RGB(100,50,280)); 
	m_btn_ok.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4); 
	m_btn_ok.SetFontColor(RGB(100,50,280)); 
 
	t=NULL; 
	isTranslating=FALSE; 
	HKEY hKey; 
	DWORD ext_port; 
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\MiniRemote",0L,KEY_ALL_ACCESS,&hKey) == ERROR_SUCCESS) 
	{ 
		DWORD dwType; 
		DWORD dwSize=sizeof(DWORD); 
		if (RegQueryValueEx(hKey,"Extination_Port",NULL,&dwType,(BYTE *)&ext_port,&dwSize) == ERROR_SUCCESS) 
			dwExtinationPort = ext_port; 
		RegCloseKey(hKey); 
	} 
	else 
		dwExtinationPort = 65521; 
 
	SetDlgItemText(IDC_SHOW,"请不要下载太大的东西哦^_^"); 
	return TRUE;  
} 
 
 
void CDownLoadDlg::OnOK()  
{ 
	UpdateData(TRUE); 
	if (m_localfile.IsEmpty() || m_remotefile.IsEmpty()) 
	{ 
		SetDlgItemText(IDC_SHOW,"文件名不能为空"); 
		return; 
	} 
	SetDlgItemText(IDC_SHOW,"下载中,请稍候..."); 
	t=AfxBeginThread((AFX_THREADPROC) DownLoadFile,this); 
	SetTimer(0,5000,NULL); 
} 
 
void CDownLoadDlg::OnFindfile()  
{ 
	CFileDialog fileDialog(false); 
	if (fileDialog.DoModal() == IDOK) 
	{ 
		m_localfile=fileDialog.GetPathName(); 
		SetDlgItemText(IDC_LOCALFILE,m_localfile); 
	} 
} 
 
void CDownLoadDlg::OnTimer(UINT nIDEvent)  
{ 
	if (!isTranslating) 
	{ 
		if (t!=NULL) 
		{ 
			TerminateThread(t->m_hThread,0); 
			TerminateThread(t->m_hThread,1); 
			CloseHandle(t->m_hThread); 
		} 
	} 
	KillTimer(0); 
	CDialog::OnTimer(nIDEvent); 
}