MyException - 我的异常网
当前位置:我的异常网» VC/MFC » VC++实现拨号上网程序详解解决方案

VC++实现拨号上网程序详解解决方案

www.MyException.Cn  网友分享于:2015-08-26  浏览:18次
VC++实现拨号上网程序详解
大家知道,在Netants、DownLoad   Expert等软件中都带有定时拨号上网下载软件的功能。而一般用户的拨号上网,利用的是Windows的Remote   Access   Service(RAS,远程访问服务)。下面介绍一下其在Visual   C++下的实现。     

  Visual   C++为我们提供了包含RAS   API声明的“ras.h″头文件。要在程序中实现拨号上网功能,其大致过程如下:

  1.   利用Modem拨号进行连接,应使用RasDial函数。

  其声明如下:

  DWORD   Ras   Dial(LPRASDIALEXTENSIONS   lpRas   DialExtensions,LPCTSTR   lpszPhonebook,LPRASDIALPARAMS   lp   Ras   DialParams,DWORD   dw   Notifier   Type,LPVOID   lpv   Notifier,LPHRASCONN   lph   Ras   Conn   )

  参数说明:

  lpRasDialExtensions和lpszPhonebook:仅在Windows   NT下有效,在Windows   95下,这两个参数被忽略。

  lpRasDialParams:这个参数很重要,它指向一个RASDIALPARAMS结构,该结构包含以下几个成员:

  dwSize:应设定为sizeof(RASDIALPARAMS);

  szEntryName和szPhoneNumber:这两个参数有联系,szEntryName可以指定要建立的连接,比方说“我的连接”等等,这是处理用户已经在“拨号网络”里建立的连接的。这时,Modem将拨打你在“我的连接”中设定的ISP号码,此时szPhoneNumber成员设为空字符串“”即可;如果你要在程序中自行指定要拨打的ISP号码的话,szEntryName可以设定为空字符串“”,此时应设置szPhoneNumber为你的ISP号码(169,663等),特别的,对于用201电话卡来上网的情况,可以设为“201,,,账号,密码#,,ISP号码#”(其中“,”表示停顿一段时间(以等待确认账号,密码等),你可以根据自己所在位置的线路状况自行调节。

  SzCallBackNumber,szDomain:设为空串“”即可。

  SzUserName,szPassword:登录用户名和密码。如169公用账号guest,guest。

  其他成员不必设置。

  DwNotifierType:指定是由窗口还是由回调函数来处理确认消息。通过确认消息我们可以得到RasDial过程的当前状态。如“正在打开段口”,“正在验证用户名和密码”等。也可设为NULL。

  dwNotifier:指定处理确认消息的窗口或回调函数。也可设为NULL。

  LphRasConn:指向一个类型为HRASCONN的变量。在调用RasDial前必须指定为NULL,RasDial若成功返回,则将RAS连接的句柄存放于它所指向的变量中。我们也可以通过此句柄来断开连接。

  只要在程序中适当位置调用RasDial函数即可建立连接。

  2.   理确认消息以得到拨号过程的当前状态。

  我们以指定窗口来处理确认消息为例说明如何得到拨号过程的当前状态。

  在处理确认消息的对话框类(或视图类等)的实现代码中加入:

  const   UINT   WM_RASEVENT   =   ::RegisterWindowMessageA(RASDIALEVENT);
  在Message   Map中手工加入消息映射:(****是你定义的对话框类名称)
  BEGIN_MESSAGE_MAP(****,   CDialog)
  //AFX_MSG_MAP(****)
  ……
  ON_REGISTERED_MESSAGE(WM_RASEVENT,   OnRasDialEvent)( <-加入此句)
  //AFX_MSG_MAP
  END_MESSAGE_MAP()
  加入成员函数处理消息:
  LRESULT   CDialInfo::OnRasDialEvent(WPARAM   wp,   LPARAM   lp)
  {
  RASCONNSTATE   rasstate=   (RASCONNSTATE)wp;
  CListBox   *info   =(CListBox   *)GetDlgItem(IDC_INFOLIST);
  //用ListBox   控件(ID为IDC-INFOLIST)来显示状态)
  switch(rasstate)
  {
  case   RASCS_OpenPort:
  info→AddString(_T(″打开端口……″));
  break;
  case   RASCS_PortOpened:
  info→AddString(_T(″端口已打开.″));
  break;
  case   RASCS_ConnectDevice:
  info→AddString(_T(″连接设备……″));
  break;
  case   RASCS_DeviceConnected:
  info→AddString(_T(″设备已连接.″));
  break;
  case   RASCS_Authenticate:
  info→AddString(_T(″验证用户及密码″));
  break;
  case   RASCS_Authenticated:
  info→AddString(_T(″通过″));
  break;
  case   RASCS_Connected:
  info-> AddString(_T(″已连接″));
  reak;
  case   RASCS_Disconnected:
  info-> AddString(_T(″连接已断开″));
  m_hRasConn=NULL;
  //可定义类型为HRASCONN的成员变量m_hRasConn来保存RAS连接的句柄。
  //在调用RasDial时用指向m_hRasConn的指针作为lphRasConn参数。
  //既然用m_hRasConn来保存连接句柄,连接断开后应重置为NULL.
  break;
  default:
  return   (LRESULT)0;
  }
  return   (LRESULT)0;
  }
  3.   断开连接:
  if   (m_hRasConn   !=   NULL)
  {
  RasHangUp(m_hRasConn);
  m_hRasConn   =   NULL;
  m_OnDial=TRUE;
  :Sleep(2000);
  }

  注意   :

  你也许注意到了以上代码中的Sleep函数,这里是必需的。需要一定时间来断开连接。如果不等待一段时间,计算机有可能无法正常关闭端口。导致下一次无法拨号,只有重新启动Windows才能解决。要预防此问题也可以调用RasGetConnectStatus函数,方法如下:

文章评论

2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
总结2014中国互联网十大段子
总结2014中国互联网十大段子
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员应该关注的一些事儿
程序员应该关注的一些事儿
中美印日四国程序员比较
中美印日四国程序员比较
漫画:程序员的工作
漫画:程序员的工作
鲜为人知的编程真相
鲜为人知的编程真相
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员都该阅读的书
程序员都该阅读的书
如何成为一名黑客
如何成为一名黑客
Java程序员必看电影
Java程序员必看电影
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
10个调试和排错的小建议
10个调试和排错的小建议
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
老程序员的下场
老程序员的下场
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
我的丈夫是个程序员
我的丈夫是个程序员
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员和编码员之间的区别
程序员和编码员之间的区别
代码女神横空出世
代码女神横空出世
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
每天工作4小时的程序员
每天工作4小时的程序员
 程序员的样子
程序员的样子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
旅行,写作,编程
旅行,写作,编程
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员的鄙视链
程序员的鄙视链
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员必看的十大电影
程序员必看的十大电影
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
那些争议最大的编程观点
那些争议最大的编程观点
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有