我是参考网上的RAS_Connect编写的程序。单独测试通过(我用MFC框架编写的),但是我设置了定时拨VPN,TRACEROUTE,断开VPN的代码,结果前两次是成功的,后面的traceroute结果就明显是在未拨VPN的情况下的结果。然后出现了一堆新建连接。关闭这个程序再打开后就又恢复了正常。不知道有哪位高人知道么
UINT CtracewhereDlg::RAS_Connect()
{
SetDlgItemText(IDC_CONNECT_STATE, "正在连接拨号网络,请稍候..."); char strEntryName[40];
char szUserName[40], szPassword[40];
char *pbuf;
CFile file("CMCC.txt",CFile::modeRead); //IP.txt与c++文件同一个文件夹
DWORD dwFileLen;
dwFileLen = file.GetLength();
pbuf=new char[dwFileLen];
pbuf = new char[dwFileLen+1];
pbuf[dwFileLen] = 0;
file.Read(pbuf,dwFileLen);
file.Close(); char *p;
p = strtok( pbuf, "," ); // C4996
sprintf(strEntryName,"%s\0", p);
// Get next token:
p = strtok( NULL, "," ); // C4996
sprintf(szUserName,"%s\0", p);
// Get next token:
p = strtok( NULL, "," ); // C4996
sprintf(szPassword,"%s\0", p); HRASCONN hRasConn = NULL; RASDIALPARAMS rdParams; //拨号连接的信息
ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
rdParams.dwSize = sizeof(RASDIALPARAMS);
lstrcpy(rdParams.szEntryName, strEntryName);
lstrcpy(rdParams.szUserName, szUserName);
lstrcpy(rdParams.szPassword, szPassword); DWORD dwRet;
dwRet = ::RasDial(NULL, NULL, &rdParams, 0L, NULL, &hRasConn);
if (dwRet) //如果函数成功,则返回0
{
char szBuf[256] = "";
::RasGetErrorString((UINT)dwRet, (LPSTR)szBuf, 256);
SetDlgItemText(IDC_CONNECT_STATE, CString("连接错误! ") + CString(szBuf) );
WinExec("rasphone -a", SW_SHOW);
return 0;
} /*----------------------------------------------------------------------*/
RASPPPIP raspppip; //获取拨号连接的IP地址
raspppip.dwSize = sizeof(RASPPPIP);
DWORD cb = sizeof(RASPPPIP);
::RasGetProjectionInfo(hRasConn, RASP_PppIp, &raspppip, &cb);
CString m_strIP;
m_strIP = (CString)raspppip.szIpAddress; /*----------------------------------------------------------------------*/ SetDlgItemText(IDC_CONNECT_STATE, "已经成功地建立了连接"); // if (::IsWindowVisible(GetSafeHwnd()))
// this->CheckNet(); return 1;
}
UINT CtracewhereDlg::RAS_Connect()
{
SetDlgItemText(IDC_CONNECT_STATE, "正在连接拨号网络,请稍候..."); char strEntryName[40];
char szUserName[40], szPassword[40];
char *pbuf;
CFile file("CMCC.txt",CFile::modeRead); //IP.txt与c++文件同一个文件夹
DWORD dwFileLen;
dwFileLen = file.GetLength();
pbuf=new char[dwFileLen];
pbuf = new char[dwFileLen+1];
pbuf[dwFileLen] = 0;
file.Read(pbuf,dwFileLen);
file.Close(); char *p;
p = strtok( pbuf, "," ); // C4996
sprintf(strEntryName,"%s\0", p);
// Get next token:
p = strtok( NULL, "," ); // C4996
sprintf(szUserName,"%s\0", p);
// Get next token:
p = strtok( NULL, "," ); // C4996
sprintf(szPassword,"%s\0", p); HRASCONN hRasConn = NULL; RASDIALPARAMS rdParams; //拨号连接的信息
ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
rdParams.dwSize = sizeof(RASDIALPARAMS);
lstrcpy(rdParams.szEntryName, strEntryName);
lstrcpy(rdParams.szUserName, szUserName);
lstrcpy(rdParams.szPassword, szPassword); DWORD dwRet;
dwRet = ::RasDial(NULL, NULL, &rdParams, 0L, NULL, &hRasConn);
if (dwRet) //如果函数成功,则返回0
{
char szBuf[256] = "";
::RasGetErrorString((UINT)dwRet, (LPSTR)szBuf, 256);
SetDlgItemText(IDC_CONNECT_STATE, CString("连接错误! ") + CString(szBuf) );
WinExec("rasphone -a", SW_SHOW);
return 0;
} /*----------------------------------------------------------------------*/
RASPPPIP raspppip; //获取拨号连接的IP地址
raspppip.dwSize = sizeof(RASPPPIP);
DWORD cb = sizeof(RASPPPIP);
::RasGetProjectionInfo(hRasConn, RASP_PppIp, &raspppip, &cb);
CString m_strIP;
m_strIP = (CString)raspppip.szIpAddress; /*----------------------------------------------------------------------*/ SetDlgItemText(IDC_CONNECT_STATE, "已经成功地建立了连接"); // if (::IsWindowVisible(GetSafeHwnd()))
// this->CheckNet(); return 1;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货