RAS补充说明

编写一个拨号上网及计费程序需要调用RAS   API,我在CSDN及VCHELP上找到  
  几篇文章,但对基本的原理说明不是很详细,对于我这样一个菜鸟而言似乎  
  不易懂,因此只好翻译了MSDN的部分内容并补充了一点点,具体的统计流量  
  请参考VCHELP上的文章,本文仅供大家参考,避免  
  重复工作。  
  ----------------------  
  RAS使用RasDial函数开始建立连接,建立后由Remote   Access    
  Connection   Manager接管。Remote   Access   Connection   Manager  
  处理建立连接的details,并提供client连接操作的状态信息。  
  当应用程序load   RASAPI32.DLL时,自动启动Remote   Access    
  Connection   Manager。  
  RasDial开始建立连接时,需要定义以下信息:  
  连接信息:用于建立连接;  
  notification   handler(可选的):在连接过程中获取连接消息;  
  RASDIALEXTENSIONS结构(可选的):一个扩展,允许或禁止扩展功能(如  
  允许client直接使用modem的一些设置,控制RAS使用phonebook   entry中的  
  前缀或后缀,在连接操作中支持paused   status。  
   
  同步操作  
  当RasDial作为同步调用时,函数直到连接建立或产生错误时才返回。  
  主要缺点在于不能获得连接过程的状态信息。  
   
  异步操作  
  异步时,必须指明一个notification   handler,他可以是一个接受消息的  
  窗口,也可是回调函数——RasDialFunc,   RasDialFunc1,   or   RasDialFunc2  
  。如同步操作一样,在发生错误时必须关闭连接操作。  
   
  Phonebook   文件以及连接信息  
  为了建立连接,RasDial必须指明连接信息,通过phone-book   entry(包括  
  电话号码,BPS,用户验证信息和其他连接信息)。  
  为了显示phonebook   entries的列表,RAS   client可以用RasEnumEntries函数  
  来列举。如果不使用phonebook   entry,则调用RasDial时将szEntryName  
  (RASDIALPARAMS结构成员)设为空字符串,而RASDIALPARAMS.szPhoneNumber    
  必须包含拨号号码,这时Remote   Access   Connection   Manager使用第一个可用  
  的modem   port以及其他设置的缺省值。  
   
  用户验证信息  
  RAS   client用RASDIALPARAMS结构(RasDial)定义用户名及密码,否则  
  Remote   Access   Connection   Manager使用当前登陆的用户名及密码。  
  如果不能登陆,则允许连接操作进入paused   state,使用户重新确定验证信息。  
   
  其他连接信息  
  RASDIALPARAMS结构还包括以下连接信息:  
  代替phonebook   entry号码的电话号码;  
  一个提供给server   call   back的号码(缺省为no   callback);  
  The   name   of   the   remote   network   domain   on   which   the   authentication    
  is   to   occur。  
   
  连接状态  
  enum   RASCONNSTATE设置了一组与连接状态相应的值。连接状态分为三组:  
  运行态:连接设备,验证用户,等待server   callback。RAS   client不提供  
  操作,仅将notification提供给用户直到发生错误。  
  Paused   states:暂停连接操作,获得新的用户名或密码等信息。  
  Terminal   states:发生在连接成功建立时、连接操作失败或调用RasHangUp  
  也可使用RasGetConnectStatus来获取当前连接状态。  
   
  Notification   Handlers  
  一个Notification   Handlers可处理的操作如下:  
  1、处理错误,此时应当调用RasHangUp结束连接,可用RasGetErrorString获得错误  
  描述;  
  2、提供链接状态,对于notification   handler并不需要采取任何操作,除非产生  
  错误,可用RasGetConnectStatus来获得设备名及类型(in   RASCS_ConnectDevice    
  notification   call   it),用RasGetProjectionInfo(in   RASCS_Projected    
  notification)获得如连接的网络协议;  
  3、处理paused   states,缺省时paused   state   is   disabled,如果要支持则设置  
  RDEOPTS_PausedStates   标记(   in   the   RASDIALEXTENSIONS   structure),  
  当paused   state产生时,Remote   Access   Connection   Manager激活notification  
  handler   ,如果paused   state   is   disabled,则在notification   message   指明  
  出错,并且连接失败,如果支持paused   state,则暂停连接等待用户相应,客户  
  可以第二次调用RasDial来恢复连接(第二次调用要指明一些信息,The    
  connection   handle   that   was   returned   by   the   original   RasDial   call.    
  The   same   notification   handler   as   the   original   RasDial   call.    
  The   user's   input   in   the   appropriate   members   of   the   RASDIALPARAMS    
  structure.   Other   members   of   the   RASDIALPARAMS   structure   should   have    
  the   same   information   as   specified   in   the   original   RasDial   call.    
  ,而且不能从notification   handler调用),或RasHangUp终止连接;  
  4、连接操作结束时,告知用户,发生在以下情况:a.连接建立,接受  
  RASCS_Connected,客户程序可以退出而不断开连接   b.发生错误,获取错误及  
  连接状态   c.由RasHangUp断开。  
  有三种handler,接受同样的信息:当前的连接状态及错误号。  
  RasDialFunc:仅接受当前连接态与错误码;  
  RasDialFunc1:可以接受连接句柄HRASCONN及扩展错误信息,该参数可用于支持  
            多个同时发生的连接操作;  
  Window   handle:一个窗口句柄,RAS送WM_RASDIALEVENT消息(含有连接状态与错  
  误码),通常应用于16位WINDOWS,因他不支持回调函数。  
  Remote   Access   Connection   Manager   悬挂起连接操作直到notification   handler  
  返回,因此handler必须尽快返回。  
  一些可在handler中调用的函数:   (RasGetConnectStatus,   RasEnumEntries,    
  RasEnumConnections,   RasGetErrorString,   and   RasHangUp)    
   
  Disconnecting  
  当用户开始连接操作时,RasDial接受连接句柄HRASCONN,如果该句柄非NULL  
  则可用RasHangUp结束连接。如果发生错误时则必须调用RasHangUp   ,即使  
  连接未能建立。在调用RasHangUp   后应用程序不能立即退出,因为Remote    
  Access   Connection   Manager   需要时间结束连接。程序应在用RasGetConnectStatus  
  返回ERROR_INVALID_HANDLE时退出,这说明连接已经被删除了。  
  应用程序可能在调用RasDial建立连接后退出,此时,可以用RasEnumConnections  
  获取当前的所有连接,他返回一个RASCONN结构,其中有HRASCONN句柄及电话号码  
  等信息。  
   
  RAS   Phone   Books  
  Phone   books提供一种标准的方法保存连接信息。Entry   name与电话号码,COM  
  PORTS,modem设置相关。95中,phonebook   entries   存在注册表。  
  可以使用RasCreatePhonebookEntry及RasEditPhonebookEntry创建及编辑  
  phone-book   entry,并自动产生DIALOG。  
  还可以用RasGetEntryDialParams   与   RasSetEntryDialParams   设置与获取  
  特殊的信息。  
  RasEnumEntries   则可获取   RASENTRYNAME   结构数组,含有phone-book   entry    
  名称。  
   
  Linking   to   the   Remote   Access   DLL  
  如果一个APP静态连接到RASAPI32.DLL,而RAS没有安装,APP会失败。但  
  可以用LoadLibrary   来装载   DLL,   用GetProcAddress获取指向RAS函数的指针。  
  必须包含头文件:RAS.H       RASERROR.H  
  在project/setting的object/labrary   modules添加rasapi32.lib则可解决连接错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值