📄 zclientdlg.cpp
字号:
DownLoadFile();
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
}
void CZclientDlg::OnRclickListFile(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POINT ptMouse;
POINT ptClientMouse;
GetCursorPos(&ptMouse);
ptClientMouse=ptMouse;
m_List.ScreenToClient(&ptClientMouse);
int ListSel=m_List.HitTest(ptClientMouse,0);
if(ListSel==-1)
return;
UpdateData(TRUE);
if(strListIP!=m_IP)
{
AfxMessageBox("你改变了对方的IP地址\n需要重新得到驱动器信息");
OnButtonGettree();
return;
}
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MENU_FILEOPT));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, ptMouse.x, ptMouse.y, this);
*pResult = 0;
}
void CZclientDlg::OnClickTreeDir(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
BeginWaitCursor();
POINT ptMouse;
GetCursorPos(&ptMouse);
m_Tree.ScreenToClient(&ptMouse);
HTREEITEM TreeSel=m_Tree.HitTest(ptMouse,0);
if(!TreeSel)
return;
UpdateData(TRUE);
if(strListIP!=m_IP)
{
AfxMessageBox("你改变了对方的IP地址\n需要重新得到驱动器信息");
OnButtonGettree();
return;
}
ShowStatusDlg();
HTREEITEM hTreeInst;
char chrPath[MAX_PATH];
GetItPath(TreeSel,chrPath);//得到当前展开的路径
hTreeInst=TreeSel;
strcpy(chrMission," \0");//为命令留出空间
strcat(chrMission,chrPath);//设置好要列出的目录
chrMission[0]=2;//设置命令
listDirectory(hTreeInst);
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
*pResult = 0;
}
void CZclientDlg::OnMenuFileoptRun()
{
// TODO: Add your command handler code here
ShowStatusDlg();
BeginWaitCursor();
HTREEITEM hitTree=m_Tree.GetSelectedItem();
char FullPath[MAX_PATH];
GetItPath(hitTree,FullPath);
int ListSel=m_List.GetSelectionMark();
strcat(FullPath,m_List.GetItemText(ListSel,0));
strcpy(chrMission," \0");//为命令留出一位(见readme文件)
strcat(chrMission,FullPath);//设置好要打开的文件
chrMission[0]=5;//设置命令
if(!ConnectSocket())
{
AfxMessageBox("无法连接");
return;
}
send(sktClient,chrMission,300,0);
closesocket(sktClient);
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
}
void CZclientDlg::DownLoadFile()
{
//显示对话框
CFileDialog Dlg(FALSE);
if(Dlg.DoModal()!=IDOK)
{
return;
}
//新建文件
CFile FileWrite;
if(!FileWrite.Open (Dlg.GetPathName (),CFile::modeCreate|
CFile::modeWrite|
CFile::typeBinary))
{
AfxMessageBox("创建文件失败!",MB_OK|MB_ICONERROR);
return;
}
FileWrite.SeekToBegin ();
//连接
if(!ConnectSocket())
{
AfxMessageBox("无法连接");
return;
}
send(sktClient,chrMission,300,0);
recv(sktClient,chrReceive,300,0);
if(!strcmp(chrReceive,"FailOpenFile\0"))
{
AfxMessageBox("对方无法打开文件,可能文件正在使用",MB_OK|MB_ICONERROR);
closesocket(sktClient);
FileWrite.Close ();;
return;
}
_finddata_t pFileInfo;
recv(sktClient,(char *)&pFileInfo,sizeof(_finddata_t)+1,0);
BYTE *pBuffer=new BYTE[SENDBLOCK];
memset(pBuffer,0,SENDBLOCK);
int StopFlag=0xFFFF;
send(sktClient,(char*)&StopFlag,sizeof(int)+1,0);
for(WORD i=0;i<(pFileInfo.size /SENDBLOCK);i++)
{
recv(sktClient,(char*)pBuffer,SENDBLOCK,0);
FileWrite.Write (pBuffer,SENDBLOCK);
memset(pBuffer,0,SENDBLOCK);
send(sktClient,(char*)&StopFlag,sizeof(int)+1,0);
}
DWORD w=pFileInfo.size %SENDBLOCK;
if(w)
{
recv(sktClient,(char*)pBuffer,w,0);
FileWrite.Write (pBuffer,w);
}
FileWrite.Close ();
closesocket(sktClient);
}
void CZclientDlg::OnButtonSearchIP()
{
UpdateData(TRUE);
BeginWaitCursor();
ShowStatusDlg();
if(m_SearchIP.GetLength()==0)
{
AfxMessageBox("清输入要搜索的IP段");
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
return;
}
// pStatusDlg->m_strStatusMsg.Format("准备开始搜索IP段%s",m_SearchIP);
// pStatusDlg->UpdateData (FALSE);
m_ListActiveIP.DeleteAllItems();
int uIP[256];
for(int i=0;i<=255;i++)
{
uIP[i]=i;
// pStatusDlg->m_strStatusMsg .Format("正在搜索%s.%d",m_SearchIP,i);
// pStatusDlg->UpdateData (FALSE);
AfxBeginThread(SearchIP,&uIP[i]);
Sleep(20);
}
for(i=5;i>=1;i--)
{
Sleep(1000);
// pStatusDlg->m_strStatusMsg .Format("正在等待数据返回,剩余%d秒",i);
// pStatusDlg->UpdateData(FALSE);
}
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
EndWaitCursor();
}
UINT SearchIP(LPVOID nParam)
{
SOCKET skt;
//create socket
int ret;
hostent *host=NULL;
skt=socket(AF_INET,SOCK_STREAM,0);
if(skt==INVALID_SOCKET)
{
closesocket (skt);
return FALSE;
}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(skt,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
closesocket (skt);
return FALSE;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(skt,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
closesocket (skt);
return FALSE;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(skt, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)
{
closesocket (skt);
return FALSE;
}
//连接
CString strSearchIP,strTmp;
strTmp.Format ("%d",*(int *)nParam);
strSearchIP.Format("%s.%s",pDlg->m_SearchIP,strTmp);
struct sockaddr_in sockaddrin;
sockaddrin.sin_family = AF_INET;
sockaddrin.sin_port = htons(6503);
sockaddrin.sin_addr .s_addr = inet_addr(strSearchIP);
if(sockaddrin.sin_addr.s_addr == INADDR_NONE)
{
closesocket (skt);
return FALSE;
}
connect(skt,(const struct sockaddr *)&sockaddrin,sizeof(sockaddrin));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(skt, &r);
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
timeout.tv_sec = 15;//连接超时15秒
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
closesocket(skt);
return FALSE;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(skt, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR)
{
closesocket (skt);
return FALSE;
}
//确认是Zserver
char cFlag[8]="zserve\0";
send(skt,cFlag,8,0);//发送client端标志
recv(skt,cFlag,8,0);//接收server端标志
if(strcmp(cFlag,"zserve\0"))
{
closesocket (skt);
return FALSE;
}
char chrM[300],chrR[300];
strcpy(chrM," \0");//为命令留出一位(见readme文件)
chrM[0]=127;//设置命令
send(skt,chrM,300,0);
recv(skt,chrR,300,0);
if(strcmp(chrR,"连接成功"))
{
closesocket (skt);
return FALSE;
}
pDlg->m_ListActiveIP .InsertItem(0,strSearchIP );
closesocket(skt);
return TRUE;
}
void CZclientDlg::OnClickListActiveip(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POINT ptMouse;
POINT ptClientMouse;
GetCursorPos(&ptMouse);
ptClientMouse=ptMouse;
m_ListActiveIP.ScreenToClient(&ptClientMouse);
int ListSel=m_ListActiveIP.HitTest(ptClientMouse,0);
if(ListSel==-1)
return;
m_IP=m_ListActiveIP.GetItemText(ListSel,0);
m_Port=6503;
UpdateData(FALSE);
m_List.DeleteAllItems();
m_Tree.DeleteAllItems();
*pResult = 0;
}
void CZclientDlg::OnButtonLock()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
BeginWaitCursor();
ShowStatusDlg();
pStatusDlg->m_strStatusMsg ="正在连接";
pStatusDlg->UpdateData(FALSE);
strcpy(chrMission," \0");//为命令留出一位(见readme文件)
chrMission[0]=7;//设置命令
if(!ConnectSocket())
{
EndWaitCursor();
AfxMessageBox("无法连接");
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
return;
}
pStatusDlg->m_strStatusMsg ="发送命令";
pStatusDlg->UpdateData(FALSE);
send(sktClient,chrMission,300,0);
closesocket(sktClient);
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
EndWaitCursor();
}
void CZclientDlg::OnButtonUnlock()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
BeginWaitCursor();
ShowStatusDlg();
pStatusDlg->m_strStatusMsg ="正在连接";
pStatusDlg->UpdateData(FALSE);
strcpy(chrMission," \0");//为命令留出一位(见readme文件)
chrMission[0]=8;//设置命令
if(!ConnectSocket())
{
EndWaitCursor();
AfxMessageBox("无法连接");
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
return;
}
EndWaitCursor();
pStatusDlg->m_strStatusMsg ="发送命令";
pStatusDlg->UpdateData(FALSE);
send(sktClient,chrMission,300,0);
EndWaitCursor();
closesocket(sktClient);
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
}
void CZclientDlg::OnButtonSendmessage()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_IP.GetLength()==0)
{
AfxMessageBox("清输入IP地址");
return;
}
CSendDlg dlg;
pSendDlg = &dlg;
pSendDlg->pDlg = this;
int nResponse = dlg.DoModal();
}
void CZclientDlg::OnMenuFileoptDelfile()
{
// TODO: Add your command handler code here
ShowStatusDlg();
BeginWaitCursor();
HTREEITEM hitTree=m_Tree.GetSelectedItem();
char FullPath[MAX_PATH];
GetItPath(hitTree,FullPath);
int ListSel=m_List.GetSelectionMark();
strcat(FullPath,m_List.GetItemText(ListSel,0));
strcpy(chrMission," \0");//为命令留出一位(见readme文件)
strcat(chrMission,FullPath);//设置好要打开的文件
chrMission[0]=10;//设置命令
pStatusDlg->m_strStatusMsg ="正在连接";
pStatusDlg->UpdateData (FALSE);
if(!ConnectSocket())
{
AfxMessageBox("无法连接");
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
return;
}
pStatusDlg->m_strStatusMsg ="发送命令";
pStatusDlg->UpdateData (FALSE);
send(sktClient,chrMission,300,0);
pStatusDlg->pDlg = NULL;
pStatusDlg->EndDialog (0);
pStatusDlg=0;
}
void CAboutDlg::OnButtonMail()
{
// TODO: Add your control notification handler code here
ShellExecute(0,0,"mailto:zant_etsu@hotmail.com",0,0,SW_SHOWNORMAL);
}
void CZclientDlg::OnButtonRexit()
{
// TODO: Add your control notification handler code here
BeginWaitCursor();
UpdateData(TRUE);
strcpy(chrMission," \0");//为命令留出一位(见readme文件)
chrMission[0]=11;//设置命令
if(!ConnectSocket())
{
AfxMessageBox("无法连接");
EndWaitCursor();
return;
}
send(sktClient,chrMission,300,0);
closesocket(sktClient);
EndWaitCursor();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -