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

📄 demodlg.cpp

📁 使用VC++开发的很棒的上网拨号工具的程序的源码,可以选择PING,UDP,TCP/IP等等方式,功能比较全面.Using Visual C + + development of the great
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// demoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "demo.h"
#include "demoDlg.h"
#include "Ip.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/*typedef struct t_TREADDATA
{
	HWND hWnd;
	HANDLE CommDev;
}THREADDATA;

UINT MyThreadProc(LPVOID pParam);
int NEAR ReadCommBlock(HANDLE,LPSTR,int);*/
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


BYTE tempdata[32]=
{
	0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
	0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
	0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x61,
	0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69
};

//IP_HEADER IP_header;

/////////////////////////////////////////////////////////////////////////////
// CDemoDlg dialog

CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDemoDlg::IDD, pParent)
{

	//{{AFX_DATA_INIT(CDemoDlg)
	m_baud = _T("19200");
	m_called = _T("9163");
	m_com = _T("COM1");
	m_password = _T("163");
	m_userid = _T("163");
//	m_ipad[0] = _T("211");
//	m_ipad[1] = _T("100");
//	m_ipad[2] = _T("31");
//	m_ipad[3] = _T("131");

	//m_ipOut[0] = _T("211");		//www.263.net
	//m_ipOut[1] = _T("100");
	//m_ipOut[2] = _T("31");
	//m_ipOut[3] = _T("131");

	m_ipOut0 = _T("216");			//www.google.com
	m_ipOut1 = _T("239");
	m_ipOut2 = _T("33");
	m_ipOut3 = _T("100");




	m_senddata = _T("AT");

	m_srcport = _T("0");
	m_desport = _T("0");

	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);


}

void CDemoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDemoDlg)
	DDX_Control(pDX, IDC_EVENT, m_event);
	DDX_CBString(pDX, IDC_BAUD, m_baud);
	DDX_Text(pDX, IDC_CALLED, m_called);
	DDX_CBString(pDX, IDC_COM, m_com);
	DDX_Text(pDX, IDC_PASSWORD, m_password);
	DDX_Text(pDX, IDC_USERID, m_userid);
	DDX_Text(pDX, IDC_IPAD0, m_ipad0);
	DDX_Text(pDX, IDC_IPAD1, m_ipad1);
	DDX_Text(pDX, IDC_IPAD2, m_ipad2);
	DDX_Text(pDX, IDC_IPAD3, m_ipad3);
	DDX_Text(pDX, IDC_IPAD4, m_ipOut0);
	DDX_Text(pDX, IDC_IPAD5, m_ipOut1);
	DDX_Text(pDX, IDC_IPAD6, m_ipOut2);
	DDX_Text(pDX, IDC_IPAD7, m_ipOut3);
	DDX_Text(pDX, IDC_RICHTEXTCTRL1, m_senddata);
	DDX_Text(pDX, IDC_SRCPORT, m_srcport);
	DDX_Text(pDX, IDC_DESPORT, m_desport);

	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
	//{{AFX_MSG_MAP(CDemoDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_INICOM, OnInicom)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_DIAL, OnDial)
	ON_MESSAGE(CN_SEND, OnSend)
	ON_BN_CLICKED(IDC_PING, OnPing)
	ON_BN_CLICKED(IDC_SendA, OnSendA)
	ON_BN_CLICKED(IDC_CloseA, OnCloseA)
	ON_BN_CLICKED(IDC_UDP, OnUdp)
	ON_BN_CLICKED(IDC_TCP, OnTcp)
	ON_BN_CLICKED(IDC_STATE, OnState)
	ON_LBN_SELCHANGE(IDC_EVENT, OnSelchangeEvent)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BEGIN_EVENTSINK_MAP(CDemoDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CDemoDlg)
	ON_EVENT(CDemoDlg, IDC_SendBox, -603 /* KeyPress */, OnKeyPressSendBox, VTS_PI2)
	ON_EVENT(CDemoDlg, IDC_SendBox, 1 /* Change */, OnChangeSendBox, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemoDlg message handlers

BOOL CDemoDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	m_ipOut=&m_ipOut0;
	m_ipad=&m_ipad0;


	framehead=FALSE;
	frameend=FALSE;
	memset(szPacketTx,0x00,256);
	memset(szPacketRx,0x00,256);
//	SetTimer(ID_CLOCK3,50,NULL);
	//OnInicom();
	GetDlgItem(IDC_DIAL)->SetFocus();
/*	BYTE teststr[256]={0x7E,0x80,0x21,0x01,0x06,0x00,0x10,0x02,0x06,0x00,0x2d,0x0f,0x00,0x03,0x06,0x3d,0x8b,0x06,0x08,0xdd,0x58,0x7e};
	BYTE teststring1[256]={0x7E,0x80,0x21,0x01,0x07,0x00,0x0a,0x03,0x06,0x3d,0x8b,0x06,0x08,0xdd,0x58,0x7e};
	BYTE teststring2[256]={0x7E,0x80,0x21,0x02,0x07,0x00,0x0a,0x03,0x06,0x3d,0x8b,0x06,0x08,0xdd,0x58,0x7e};
	BYTE teststring3[256]={0x7E,0x80,0x21,0x01,0x08,0x00,0x0a,0x03,0x06,0x3d,0x8b,0x06,0x08,0xdd,0x58,0x7e};

	recv=TRUE;
	Display(recv,teststr);
//	BYTE teststr[256]={0x7E,0xFF,0x03,0xc0,0x21,0x01,0x02,0x00,0x1f,0x01,0x04,0x05,0xea,0x02,0x06,0xff,0xff,0xff,0xff,0x05,0x06,0x74,0x8d,0xd1,0x3b,0x07,0x02,0x08,0x02,0x11,0x04,0x05,0xea,0x13,0x03,0x00,0x9f,0x3e,0x7e};//
//	Display(recv,teststr);
	m_packet.compress=2;
	m_packet.checkpacket(teststr);
	recv=FALSE;
	Display(recv,m_packet.bPacketTx);
	
	recv=TRUE;
	Display(recv,teststring1);
	m_packet.checkpacket(teststring1);
	recv=FALSE;
	Display(recv,m_packet.bPacketTx);

	recv=TRUE;
	Display(recv,teststring2);
	m_packet.checkpacket(teststring2);
	recv=FALSE;
	Display(recv,m_packet.bPacketTx);
	
	recv=TRUE;
	Display(recv,teststring3);
	m_packet.checkpacket(teststring3);
	recv=FALSE;
	Display(recv,m_packet.bPacketTx);
/*	BYTE teststr1[64]={0x0a,0x11,0x7E,0xFF,0x7d,0x23,0xc0,0x21};
	BYTE teststr2[64]={0x7d,0x22,0x7d,0x21,0x7d,0x20,0x7d,0x3f,0x7d,0x21,0x7d,0x24,0x7d,0x25,0x7d,0x5e,0x7d,0x22,0x7d,0x26,0xff,0xff,0xff,0xff,0x7e,0x22,0xff};
	BYTE teststr3[64]={0x20,0x7E,0xFF,0x7d,0x23,0xc0,0x21,0x00,0xff};
	BYTE teststr4[64]={0x97,0x23,0x7E,0x00,0xff};
	testcat(teststr1);
	testcat(teststr2);
	testcat(teststr3);
	testcat(teststr4);
//	sprintf(teststr,"\x7E\xFF\x03\xC0\x21\x01\x01\x00\x0c\x02\x06\x00\x0a\x00\x00\x03\x04\xc0\x23");
/*	THREADDATA m_threaddata;
	m_threaddata.CommDev=hCommDev;
	m_threaddata.CommDev=GetSafeHwnd();
	AfxBeginThread(MyThreadProc,&m_threaddata,THREAD_PRIORITY_NORMAL);
	*/
	return TRUE;  // return TRUE  unless you set the focus to a control
}

/*UINT MyThreadProc(LPVOID param)
{
	DWORD dwEvtMask;
	int nLength; 
	BYTE abIn[1024];
	THREADDATA *pData=(THREADDATA*)param;
	while (1) 
	{	dwEvtMask=0 ; 
		WaitCommEvent(pData->CommDev,&dwEvtMask,NULL); 

		if ((dwEvtMask&EV_RXCHAR)==EV_RXCHAR) 
		{ 
			do 
			{ 
				if(nLength=ReadCommBlock(pData->CommDev,(LPSTR)abIn,1024)) 
				{ 
					//WriteCommBlock((LPSTR)abIn,nLength ); 
					*(abIn+nLength)=0; 
					::SendMessage(pData->hWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn); 
				} //end if
			} while (nLength>0); //end do
		} //end if
	} //end while

}
*/
	
void CDemoDlg::OnSend(LPARAM lParam)
{
	int len;
//	BYTE InBuf[1024];

	len=(int)lParam;
	//InBuf=(BYTE)wParam;
//	tempstr.Format("receiced %d",len);
//	m_event.AddString(tempstr);
}

void CDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CDemoDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CDemoDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
/*typedef struct _DCB {
    DWORD DCBlength;      /* sizeof(DCB)                     
    DWORD BaudRate;       /* Baudrate at which running       
    DWORD fBinary: 1;     /* Binary Mode (skip EOF check)    
    DWORD fParity: 1;     /* Enable parity checking          
    DWORD fOutxCtsFlow:1; /* CTS handshaking on output       
    DWORD fOutxDsrFlow:1; /* DSR handshaking on output       
    DWORD fDtrControl:2;  /* DTR Flow control                
    DWORD fDsrSensitivity:1; /* DSR Sensitivity              /
    DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent 
    DWORD fOutX: 1;       /* Enable output X-ON/X-OFF        /
    DWORD fInX: 1;        /* Enable input X-ON/X-OFF         /
    DWORD fErrorChar: 1;  /* Enable Err Replacement          /
    DWORD fNull: 1;       /* Enable Null stripping           /
    DWORD fRtsControl:2;  /* Rts Flow control                /
    DWORD fAbortOnError:1; /* Abort all reads and writes on Error /
    DWORD fDummy2:17;     /* Reserved                        /
    WORD wReserved;       /* Not currently used              /
    WORD XonLim;          /* Transmit X-ON threshold         /
    WORD XoffLim;         /* Transmit X-OFF threshold        /
    BYTE ByteSize;        /* Number of bits/byte, 4-8        /
    BYTE Parity;          /* 0-4=None,Odd,Even,Mark,Space    /
    BYTE StopBits;        /* 0,1,2 = 1, 1.5, 2               /
    char XonChar;         /* Tx and Rx X-ON character        /
    char XoffChar;        /* Tx and Rx X-OFF character       /
    char ErrorChar;       /* Error replacement char          /
    char EofChar;         /* End of Input character          /
    char EvtChar;         /* Received Event character        /
    WORD wReserved1;      /* Fill for now.                   /
} DCB, *LPDCB;
*/
void CDemoDlg::OnInicom() 
{
	// TODO: Add your control notification handler code here
	memset(szPacketRx,0x0,256);
	memset(szPacketTx,0x0,256);
	ATState=0;

    MyReadFile_Flag=false;
	MyReadFile_Flag1=false;
	m_event.ResetContent();
	UpdateData(TRUE);
	DCB dcb;
	hCommDev=CreateFile(m_com,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);//打开串口
//	hCommDev=CreateFile(m_com,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);//打开串口
	if (hCommDev==(HANDLE)-1)
	{
		tempstr.Format(":initiate modem error");
		m_event.AddString(m_com+tempstr);
		writelog(m_com+tempstr);
	}
	else
	{
		tempstr.Format(":initiate modem successfully");
		m_event.AddString(m_com+tempstr);
		writelog(m_com+tempstr);
	}
/*
//<wcy
	oCommDev.hEvent = CreateEvent(
			NULL,   // no security attributes 
			FALSE,  // auto reset event 
			FALSE,  // not signaled 
			NULL    // no name 
		);
	if (SetCommMask(hCom, EV_RXFLAG))
	{
		tempstr.Format(":Set Mask successfully!");
		m_event.AddString(m_com+tempstr);
		m_event.AddString(m_com+tempstr);
	}
	else
	{
		tempstr.Format(":Set Mask Error!");
		m_event.AddString(m_com+tempstr);
		m_event.AddString(m_com+tempstr);
	}
//wcy>
*/
	COMMTIMEOUTS CommTimeOuts;
	CommTimeOuts.ReadIntervalTimeout=MAXDWORD;
	CommTimeOuts.ReadTotalTimeoutMultiplier=0;
	CommTimeOuts.ReadTotalTimeoutConstant=0;
	CommTimeOuts.WriteTotalTimeoutMultiplier=0;
	CommTimeOuts.WriteTotalTimeoutConstant=0;

	BuildCommDCB(m_com+":"+m_baud+",n,8,1",&dcb);//配置串口 8位数据位,1位停止位,物理层
    dcb.fRtsControl=RTS_CONTROL_DISABLE;
	dcb.fDtrControl=DTR_CONTROL_ENABLE; 	  // DTR flow control type 2
//*
	//dcb.fDsrSensitivity=1;			// DSR sensitivity 
	//dcb.fTXContinueOnXoff=0;		// XOFF continues Tx 
	//dcb.fOutX=0;					// XON/XOFF out flow control 
	//dcb.fInX=0; 					// XON/XOFF in flow control 
	//dcb.fNull=0;					// enable null stripping 
	//dcb.ErrorChar=ErrorChar;
//  */  
	SetCommState(hCommDev,&dcb);

	SetCommTimeouts(hCommDev,&CommTimeOuts);
	PurgeComm(hCommDev,PURGE_TXCLEAR);//清发送缓冲区
	PurgeComm(hCommDev,PURGE_RXCLEAR);//清接收缓冲区
	
	char strOutMsg[20];
	DWORD dwBytesWritten;


	sprintf(strOutMsg,"AT\r");
	
	WriteFile(hCommDev,strOutMsg,strlen(strOutMsg),&dwBytesWritten,NULL);//初始化MODEM
	tempstr.Format("发:%s",strOutMsg);
	m_event.AddString(tempstr);
	writelog(m_com+tempstr);
	ini=TRUE;

	PurgeComm(hCommDev,PURGE_TXCLEAR);//清发送缓冲区
	PurgeComm(hCommDev,PURGE_RXCLEAR);//清接收缓冲区
	/*if (!SetCommMask(hCommDev,EV_RXCHAR)) 
	{
		tempstr.Format(":SetCommMask error!");
		m_event.AddString(m_com+tempstr);
		writelog(m_com+tempstr);
	}*/
	memset(temp,0x00,256);
	SetTimer(ID_CLOCK1,50,NULL);

	GetDlgItem(IDC_INICOM)->EnableWindow(false);
	GetDlgItem(IDC_SendA)->EnableWindow(false);
	GetDlgItem(IDC_CloseA)->EnableWindow(true);
	
}

bool CDemoDlg::OnTimer(UINT nIDEvent) 
{
	BYTE* strCommRecvMsg=new BYTE[256];
	DWORD dwBytesWritten;
	
	memset(strCommRecvMsg,0x00,256);
	bool bReturn;
	DWORD dwBytesRead;
	int k,l,start=0;
	int mm;

	if(nIDEvent==5)//send icmp ping packet
	{
		KillTimer(ID_CLOCK5);
		PurgeComm(hCommDev,PURGE_TXCLEAR);//清发送缓冲区
		m_packet.makepacket(IPCP,REQ,temp);
		DWORD dwBytesWritten;
		m_packet.IPCP_s=0;
		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==4)
	{
		KillTimer(ID_CLOCK4);
		SetDlgItemText(IDC_RICHTEXTCTRL1,"");
		GetDlgItem(IDC_RICHTEXTCTRL1)->EnableWindow(true);
		GetDlgItem(IDC_RICHTEXTCTRL1)->SetFocus();
		return true;
	}
	else if(nIDEvent==3)//send icmp ping packet
	{
		KillTimer(ID_CLOCK3);
		return true;
		memset(temp,0x00,256);
		PurgeComm(hCommDev,PURGE_TXCLEAR);

		temp[0]=atoi(m_ipOut[0]);//destination address
		temp[1]=atoi(m_ipOut[1]);
		temp[2]=atoi(m_ipOut[2]);
		temp[3]=atoi(m_ipOut[3]);
		temp[4]=strlen(m_senddata)>>8;
		//temp[4]=32;
		temp[5]=strlen(m_senddata)&0x00ff;
		mm=strlen(m_senddata)+6;
		l=0;
		for (k=6;k<mm;k++)

⌨️ 快捷键说明

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