📄 demodlg.cpp
字号:
{
//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 + -