⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demodlg.cpp

📁 使用VC++开发的很棒的上网拨号工具的程序的源码,可以选择PING,UDP,TCP/IP等等方式,功能比较全面.Using Visual C + + development of the great
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		{
			//temp[k]=tempdata[l++];
			temp[k]=m_senddata[l++];
		}
		//format of temp for udp:
			//destination address 4bytes
			//source port 2bytes msb+lsb
			//destination port  2bytes msb+lsb
			//udp data length 2bytes msb +lsb
			//udp data
		//m_packet.makepacket(IP,PING,temp);
		m_packet.IP_header.protocol=IP_ICMP;
		m_packet.makeIPpacket(IP_ICMP,ICMP_PING,temp);
		DWORD dwBytesWritten;
		if (WriteFile(hCommDev,m_packet.bPacketTx,m_packet.TxLen,&dwBytesWritten,NULL)<1)
		{
			m_event.AddString("send error.");
			writelog("send error");
			return false;
		}
		recv=FALSE;
		Display(recv,m_packet.bPacketTx1);
		memset(szPacketRx,0x00,256);
		//SetTimer(ID_CLOCK3,6000,NULL);//SEND IP PACKET
		SetTimer(ID_CLOCK1,50,NULL);
		return true;
	}

	else if(nIDEvent==2)
	{
		KillTimer(ID_CLOCK2);
		PurgeComm(hCommDev,PURGE_TXCLEAR);//清发送缓冲区
		m_packet.makepacket(LCP,ACK,temp);
		DWORD dwBytesWritten;
		if (WriteFile(hCommDev,m_packet.bPacketTx,m_packet.TxLen,&dwBytesWritten,NULL)<1)
		{
			m_event.AddString("send error.");
			writelog("send error");
			return false;
		}
		recv=FALSE;
		Display(recv,m_packet.bPacketTx1);
		memset(szPacketRx,0x00,256);
		SetTimer(ID_CLOCK1,50,NULL);
		return true;
	}

	else if (nIDEvent==1)
	{
		UpdateData(TRUE);
/*		BYTE LastLeftBuf[256];
		static bool LastLeft=false;
        if  (LastLeft){
            int jj;
			for(jj=0;jj<256;jj++) {
				strCommRecvMsg[jj]=LastLeftBuf[jj];
				if (LastLeftBuf[jj]='\0') break;
			}			
		    bReturn=ReadFile(hCommDev,strCommRecvMsg+jj,100,&dwBytesRead,NULL); 
			LastLeft=false;
		}
*/
//		else {
	    bool bReturn=false;
		if (MyReadFile_Flag==false)	bReturn=ReadFile(hCommDev,strCommRecvMsg,150,&dwBytesRead,NULL);
		else
		{
	//		bReturn=ReadFile(hCommDev,strCommRecvMsg,1,&dwBytesRead,NULL);


			DWORD dwBytesRead1;		
			int ii=0;
			dwBytesRead=0;
			
			
			//for(;1;) {
			for(ii=0;ii<256;ii++) {
				ReadFile(hCommDev,strCommRecvMsg+ii,1,&dwBytesRead1,NULL);
				if (dwBytesRead1==1){
					if (dwBytesRead==0) KillTimer(ID_CLOCK1);
					bReturn=true;
					dwBytesRead++;
					//if ((strCommRecvMsg[ii]==0x7E) && (dwBytesRead!=1)) break;
					if (strCommRecvMsg[ii]==0x7E) break;
					else
					{

						if ((framehead==FALSE)&&(dwBytesRead==1)&&MyReadFile_Flag1==TRUE)
						{
							strCommRecvMsg[1]=strCommRecvMsg[0];
							strCommRecvMsg[0]=0x7E;		
							dwBytesRead++;
							break;
						}
					
					}//ii++;
			   }

				else break;
			 }
			   		   
		}
            /*   读一个字符
			   判断该字符是否7E
			   如果是则停止读数据
			   如果不是则继续读数
			*/

//		}
	
		//BOOL aReturn=WaitCommEvent(hCommDev,EV_RXFLAG,NULL);
		if (dwBytesRead<1)//无新数据,返回
		{
			delete strCommRecvMsg;
			return false;
		}

		if (!bReturn)//失败,返回
		{
			tempstr.Format(":接收失败");
			m_event.AddString(m_com+tempstr);
			writelog(m_com+tempstr);
			delete strCommRecvMsg;
			return false;
		}
		else
		{
			UpdateData(TRUE);
			char* strOutMsg=new char[256];
			memset(strOutMsg,0x00,256);
			CString findstr;
			findstr=strCommRecvMsg;
			
			tempstr.Format("收:%s",strCommRecvMsg);
			m_event.AddString(tempstr);
			writelog(tempstr);

			
			if (ATState<8)
			{
				if (findstr.Find("OK",NULL)!=-1 && ini )
				{
					//ini=FALSE;
					
					switch (ATState)
					{
					
					case 0:
						sprintf(strOutMsg,"ATE0V1\r");
						ATState++;
						break;
					case 1:
						sprintf(strOutMsg,"AT\r");
						ATState++;
						break;
					case 2:
						sprintf(strOutMsg,"ATS0=0\r");
						ATState++;
						break;
					case 3:
						sprintf(strOutMsg,"AT\r");
						ATState++;
						break;
					case 4:
						sprintf(strOutMsg,"ATE0V1\r");
						ATState++;
						GetDlgItem(IDC_DIAL)->EnableWindow(TRUE);
						break;
					}
					if (ATState<5)
					{
						
						WriteFile(hCommDev,strOutMsg,strlen(strOutMsg),&dwBytesWritten,NULL);
						tempstr.Format("发:%s",strOutMsg);
						m_event.AddString(tempstr);
						writelog(m_com+tempstr);
					}
				}
				else if ((findstr.Find("gin",NULL)!=-1) || (findstr.Find("ame",NULL)!=-1) )
				{

					//memset(strOutMsg,0x00,256);
					strcpy(strOutMsg,m_userid);
					strcat(strOutMsg,"\r");
					WriteFile(hCommDev,strOutMsg,strlen(strOutMsg),&dwBytesWritten,NULL);//初始化MODEM
					tempstr.Format("发:%s",strOutMsg);
					m_event.AddString(tempstr);
					writelog(tempstr);
					
					//wcy 2002-
				}

				else if (findstr.Find("rd",NULL)!=-1)
				{			

					//memset(strOutMsg,0x00,256);
					strcpy(strOutMsg,m_password);
					strcat(strOutMsg,"\r");
					DWORD dwBytesWritten;
					WriteFile(hCommDev,strOutMsg,strlen(strOutMsg),&dwBytesWritten,NULL);//初始化MODEM
					tempstr.Format("发:%s",strOutMsg);
					m_event.AddString(tempstr);
					writelog(tempstr);

					iLen=0;
					MyReadFile_Flag=true;
					

				}
				else SetTimer(ID_CLOCK1,50,NULL);
			}
			//else SetTimer(ID_CLOCK1,50,NULL);


            
			if (findstr.Find('~',NULL)!=-1)
			{	
		
				MyReadFile_Flag1=true;
				if (!framehead) 
				{
					memset(RecvMsgtemp,0x00,256);
					iLen=0;
					framehead=TRUE;
					for(k=0;k<256;k++)
					{
						if(strCommRecvMsg[k]=='~')
						{
							//if (k==0) break;
							if (strCommRecvMsg[k+1]=='~') k++;
							for(l=0;l<256,k<256;l++,k++)
							{								
								if(strCommRecvMsg[k]!='\0')
									RecvMsgtemp[l]=strCommRecvMsg[k];
								else
									break;

							}
							break;
						}
					}
					bytecat(RecvMsgtemp);
				}else//if(!framehead) 
				{
					framehead=FALSE;
					frameend=TRUE;
					for(k=0;k<256;k++)
					{
						if(strCommRecvMsg[k]=='~')
						{
							if (strCommRecvMsg[k+1]=='~')
							{
								framehead=FALSE;
								frameend=FALSE;
							}
							else
							{
							for(int l=0;l<=k;l++)
							{
								RecvMsgtemp[l]=strCommRecvMsg[l];// modified by wcy
							}
							}
							break;
						}
						
					}
					bytecat(RecvMsgtemp);

					BYTE select;
					select=0x00;
					for(int i=0;i<256;i++)
					{
						if (szPacketRx[i]==0x7d)
						{
							if(szPacketRx[i+1]==0x5e)//0x7e
							{
								select=0x7e;
								szPacketRx[i+1]=select;
							}else if(szPacketRx[i+1]==0x5d)//0x7d
							{
								select=0x7d;
								szPacketRx[i+1]=select;
							}else//<0x20
							{
								select=szPacketRx[i+1]-0x20;
								szPacketRx[i+1]=select;
							}
							for(int j=i;j<256;j++)
							{
								szPacketRx[j]=szPacketRx[j+1];
							}
						}//end if (szPacketRx[i]==0x7d)
					}//end for
					framehead=FALSE;
					frameend=FALSE;
					
					KillTimer(ID_CLOCK1);
					if (!m_packet.checkpacket(szPacketRx))
					{
						writelog("FCS check error");
						m_event.AddString("FCS check error");
						return false;
					}
					recv=TRUE;
					Display(recv,szPacketRx);
					//if(WriteFile(hCommDev,m_packet.bPacketTx,iLen,&dwBytesWritten,NULL))
					if(WriteFile(hCommDev,m_packet.bPacketTx,m_packet.TxLen,&dwBytesWritten,NULL))
					{
						 recv=FALSE;
						 //Display(recv,m_packet.bPacketTx);
						 //Display(recv,&(m_packet.bPacketTx1[0]));
						 if ( m_packet.TxLen!=0 ) Display(recv,m_packet.bPacketTx1);
					}

					int address=0;
					CString tempad;
					switch(m_packet.bState)
					{
					case LCPOPEN:
						GetDlgItem(IDC_STATE)->SetWindowText("正在建立连接...");
						for(i=0;i<256;i++)
							temp[i]=szPacketRx[i];
						SetTimer(ID_CLOCK2,500,NULL);
						break;
					case IPCPOPEN:
						GetDlgItem(IDC_STATE)->SetWindowText("正在注册计算机...");
						for(i=0;i<256;i++)
						{

							temp[i]=szPacketRx[i];
						}
						SetTimer(ID_CLOCK5,500,NULL);
						break;
					case IPCPOK:
						//m_packet.bState=IPSTART;
						tempad.Format("%u",m_packet.bIpaddress[0]);//首位
						m_ipad[0]=tempad;
						tempad.Format("%u",m_packet.bIpaddress[1]);//第二位
						m_ipad[1]=tempad;

						tempad.Format("%u",m_packet.bIpaddress[2]);//第三位
						m_ipad[2]=tempad;
						tempad.Format("%u",m_packet.bIpaddress[3]);//第四位
						m_ipad[3]=tempad;
						UpdateData(FALSE);
						GetDlgItem(IDC_STATE)->SetWindowText("连接已建立");
						//SetTimer(ID_CLOCK3,6000,NULL);//SEND IP PACKET
//*
						if (m_packet.IPCP_s==IPCPREOPEN)
						{
							for(i=0;i<256;i++)
							{

								temp[i]=szPacketRx[i];
							}
							SetTimer(ID_CLOCK5,500,NULL);
							KillTimer(ID_CLOCK1);
						}
//* /
						memset(szPacketRx,0x00,256);
						SetTimer(ID_CLOCK1,50,NULL);

						GetDlgItem(IDC_PING)->EnableWindow(true);
						GetDlgItem(IDC_UDP)->EnableWindow(true);
						GetDlgItem(IDC_TCP)->EnableWindow(true);

						//tempstr.Format("Local IP Adress: %s . %s . %s . %s",m_ipad[0],m_ipad[1],m_ipad[2],m_ipad[3]);
						//m_event.AddString(tempstr);
						//writelog(tempstr);
						break;
					default:
						memset(szPacketRx,0x00,256);
						SetTimer(ID_CLOCK1,50,NULL);
						break;
					}//end switch
					
				}//end if(framehead) 
			}//end if(findstr.Find('~',NULL)!=-1)
			
			memset(RecvMsgtemp,0x0,256);

			if (framehead && (findstr.Find('~',NULL)==-1)) 
			{
				bytecat(strCommRecvMsg);
			}
			
			delete strOutMsg;
		}//receive valid data
		
		PurgeComm(hCommDev,PURGE_TXCLEAR);//清发送缓冲区
		//	PurgeComm(hCommDev,PURGE_RXCLEAR);//清接收缓冲区
		delete strCommRecvMsg;
		return true;
	}// ID_CLOCK1
	
	return true;
	CDialog::OnTimer(nIDEvent);
}

void CDemoDlg::bytecat(BYTE* strCommRecvMsg)
{
	int k;
	for(k=0;k<256;k++)
	{
		if (strCommRecvMsg[k]!='\0')
		{
			szPacketRx[k+iLen]=strCommRecvMsg[k];
		}
		else
		{
			iLen+=k;
			break;
		}//end if
	}//end for
}

void CDemoDlg::OnDial() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	char* strOutMsg=new char[256];
	memset(strOutMsg,0x00,256);
	strcpy(strOutMsg,"ATDT");
	strcat(strOutMsg,m_called);
	strcat(strOutMsg,"\r");
	DWORD dwBytesWritten;
	WriteFile(hCommDev,strOutMsg,strlen(strOutMsg),&dwBytesWritten,NULL);//初始化MODEM
	tempstr.Format("发:%s",strOutMsg);
	m_event.AddString(tempstr);
	writelog(tempstr);
	GetDlgItem(IDC_STATE)->SetWindowText("正在拨号...");
	delete strOutMsg;
	GetDlgItem(IDC_DIAL)->EnableWindow(false);
//	GetDlgItem(IDC_LOGIN)->EnableWindow(TRUE);
}

/*
void CDemoDlg::OnLogin() 
{
	DWORD dwBytesWritten;
	char* strOutMsg=new char[256];
	
	UpdateData(TRUE);
	memset(strOutMsg,0x00,256);
	strcpy(strOutMsg,m_password);
	strcat(strOutMsg,"\r");
	
	WriteFile(hCommDev,strOutMsg,strlen(strOutMsg),&dwBytesWritten,NULL);//初始化MODEM
	tempstr.Format("发:%s",strOutMsg);
	m_event.AddString(tempstr);
	writelog(tempstr);

}
*/

void CDemoDlg::writelog(CString temp)
{
	CStdioFile file;
	CString filename;
	CTime time;
	time=CTime::GetCurrentTime();
	filename=time.Format("%Y%m%d");
	file.Open(filename+".log",CFile::modeNoTruncate|CFile::modeCreate|CFile::modeWrite|CFile::typeText);
	file.SeekToEnd();
	temp=time.Format("%Y.%m.%d %H:%M:%S  ")+temp+"\r\n";
	file.Write(temp,temp.GetLength());
	file.Close();
}

/*int NEAR ReadCommBlock(HANDLE COMDEV,LPSTR lpszBlock,int nMaxLength) 
{ 
	BOOL fReadStat ; 
	COMSTAT ComStat ; 
	DWORD dwErrorFlags; 
	DWORD dwLength; 
//	DWORD dwError; 

	//if (!npGPSInfo) return(FALSE); 

	ClearCommError(COMDEV,&dwErrorFlags,&ComStat); 
	dwLength=min((DWORD)nMaxLength,ComStat.cbInQue); 

	if (dwLength>0) 
	{ 
		fReadStat=ReadFile(COMDEV,lpszBlock,dwLength,&dwLength,NULL); 
		if (!fReadStat) 
		{ 
			if (GetLastError()==ERROR_IO_PENDING) 
			{ 
				OutputDebugString("\n\rIO Pending"); 
			/*	while(!GetOverlappedResult(COMDEV(npGPSInfo),&READ_OS(npGPSInfo),&dwLength,TRUE)) 
				{
					dwError=GetLastError(); 
					if(dwError == ERROR_IO_INCOMPLETE)
					continue; 
				}*/ //end while
/*			} 
			else 
			{
				dwLength=0; 
				ClearCommError(COMDEV,&dwErrorFlags,&ComStat); 
			}//end if 
		}//end if 
	} 
	return ( dwLength ) ; 
} 
*/


/*void CDemoDlg::OnReadfile() 
{
	CStdioFile file;
	CString filename;
	CTime time;
	char* content=new char[256];
	
/*	time=CTime::GetCurrentTime();
	filename=time.Format("%Y%m%d");
	file.Open(filename+".log",CFile::modeNoTruncate|CFile::modeCreate|CFile::modeRead|CFile::typeText);	
	file.SeekToBegin();
	file.Read(content,256);
	int len=strlen(content);
	for (int i=0;i<len;i++)
	{
		tempstr.Format(": %x",content[i]);
		m_event.AddString(tempstr);
	//	writelog(m_com+tempstr);
	}*/
/*	BYTE tempstr[256];
	memset(tempstr,0x00,256);
	DWORD dwBytesWritten;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -