www.pudn.com > mini_remote.zip > UpLoadFileDlg.cpp
// UpLoadFileDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MainCtrl.h"
#include "UpLoadFileDlg.h"
#include "sys/stat.h"
void UpLoadFile(void *m_Dlg)
{
CUpLoadFileDlg *dlg = (CUpLoadFileDlg *)m_Dlg;
COMMAND_MSG msg;
memset(&msg,0,sizeof(COMMAND_MSG));
msg.msg_id = CMD_UPLOADFILE;
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)
{
closesocket(hClientSocket);
dlg->SetDlgItemText(IDC_SHOW,"!!!上传出错!!!");
return;
}
FILE* f=fopen(dlg->m_localfile.GetBuffer(0),"rb");
if (f == NULL)
{
closesocket(hClientSocket);
return;
}
struct _stat ST;
_stat(dlg->m_localfile.GetBuffer(0), &ST);
DWORD dwFileLength=ST.st_size;
DWORD dwPoint=0,dwDiffer=0;
FILETRASFER_MSG fmsg;
while(1)
{
memset(&fmsg,0,sizeof(FILETRASFER_MSG));
dwDiffer=dwFileLength-dwPoint;
if(dwDiffer>4096)
dwDiffer=4096;
dwPoint+=dwDiffer;
fread(fmsg.wParam,dwDiffer,1,f);
fmsg.dwFinger = dwDiffer;
fmsg.isEnd=FALSE;
while(1)
{
int nRet=send(hClientSocket,(char *)&fmsg,sizeof(FILETRASFER_MSG),NULL);
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue;
}
else
{
fclose(f);
closesocket(hClientSocket);
return;
}
}
else break;
}
if (dwDiffer<4096)
{
dlg->SetDlgItemText(IDC_SHOW,"!!!上传完毕!!!");
memset(&fmsg,0,sizeof(FILETRASFER_MSG));
fmsg.isEnd=TRUE;
send(hClientSocket,(char *)&fmsg,sizeof(FILETRASFER_MSG),NULL);
closesocket(hClientSocket);
fclose(f);
return;
}
}
}
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUpLoadFileDlg dialog
CUpLoadFileDlg::CUpLoadFileDlg(CWnd* pParent /*=NULL*/)
: CDialog(CUpLoadFileDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CUpLoadFileDlg)
m_localfile = _T("");
m_remotefile = _T("");
//}}AFX_DATA_INIT
}
void CUpLoadFileDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUpLoadFileDlg)
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(CUpLoadFileDlg, CDialog)
//{{AFX_MSG_MAP(CUpLoadFileDlg)
ON_BN_CLICKED(IDC_FINDFILE, OnFindfile)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUpLoadFileDlg message handlers
BOOL CUpLoadFileDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_btn_ok.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4);
m_btn_ok.SetFontColor(RGB(100,50,280));
m_btn_1.LoadBitmaps(IDB_BITMAP1,5, 5, 5, 5, 4);
m_btn_1.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 CUpLoadFileDlg::OnOK()
{
if (m_localfile.IsEmpty() || m_remotefile.IsEmpty())
{
SetDlgItemText(IDC_SHOW,"文件名不能为空");
return;
}
SetDlgItemText(IDC_SHOW,"上传中,请稍候...");
t=AfxBeginThread((AFX_THREADPROC) UpLoadFile,this);
SetTimer(0,5000,NULL);
//CDialog::OnOK();
}
void CUpLoadFileDlg::OnFindfile()
{
CFileDialog fileDialog(true,"*.*",NULL,NULL,"所有文件(*.*)|*.*||");
if (fileDialog.DoModal() == IDOK)
{
m_localfile = fileDialog.GetPathName();
m_remotefile+=fileDialog.GetFileName();
UpdateData(FALSE);
}
}
void CUpLoadFileDlg::OnTimer(UINT nIDEvent)
{
if (!isTranslating)
{
if (t!=NULL)
{
TerminateThread(t->m_hThread,0);
TerminateThread(t->m_hThread,1);
CloseHandle(t->m_hThread);
t=NULL;
}
}
KillTimer(0);
CDialog::OnTimer(nIDEvent);
}