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