上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
VC拨号上网程序
作者:未知 申领版权
2010年10月11日 共有 1279 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    Visual C++为我们提供了包含RAS API声明的“ras.h″头文件。要在程序中实现拨号
    上网功能,其大致过程如下: 
    1. 利用Modem拨号进行连接,应使用RasDial函数。 
    其声明如下: 
    Dword Ras Dial(LPRASDIALEXTENSIONS lpRas DialExtensions,LPCTSTR lpszPhoneboo
    k,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,Ras
    Dial若成功返回,则将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函数,方法如下: 
    RASCONNSTATUS rStatus; 
    while(RasGetConnectStatus(m_hRasConn,&rStatus)!=ERROR_INVALID_HANDLE)
    
    { 
    ::Sleep(0); 
    } 
    4.在以下情况下: 
    ① 浏览网页时有时会出现停止响应,重启explorer后任务栏上的连接状态图标也许会消
    失。 
    ② 希望在连接成功后,退出程序,再次执行此程序可选择断开连接。 
    可以调用RasEnumConnection函数来得到当前连接的句柄。 
    举例如下: 
    HRASCONN hRasConnect;DWORD dwBuffferSize, dwNumofConnections;//缓冲区大小,连
    接数 
    LPRASCONN lpRasConn; 
    lpRasConn = new RASCONN[3】;//最多可得到3个连接句柄,客户端程序其实不必设为
    3,因连接数有限,大部分仅一个连接。 
    lpRasConn[0】.dwSize = sizeof(RASCONN); 
    dwBuffferSize = 32* sizeof(RASCONN);//求出由3个RASCONN结构构成的缓冲区大小 
    RasEnumConnections(lpRas Conn, &dw Buffer Size, &dw Numof Connections);//
    此函数若成功则返回零。 
    for(DWORD i=0; i     { 
    hRasConnect = lpRasConn[i】.hrasconn;//RASCONN结构的hrasconn成员为RAS连接句
    柄 
    RasHangUp(hRasConnect); 
    ::Sleep(2000); 
    } 
    delete [】 lpRasConn; 
    在Windows 98,Visual C++ 6.0下调试通过。 
    这样,一个实现基本拨号上网功能的程序就完成了。如果你要了解更多有关情况或服务
    器端程序设计,可以参考MSDN→Platform SDK→Networking and Distributed Services→Remote Access Service的有关内容

    

 

相关新闻

《VB程序设计基础》选择题
如何在Java中避免equals方法的隐藏陷阱
汇编语言程序设计-顺序结构程序设计
第10章 应用程序的设计
实验三 简单的C程序设计
经典C语言程序设计100例71-80
全屏抗锯齿
Notes on Programming in C
并行思维3
并行思维2

您可能对这些感兴趣  

用VB做定时断线程序
VisualBasic中的界面设计原则和编程技巧
VB6.0与Windows API 间的呼叫技巧
制作可以自动隐藏的弹出式菜单
ListBox中的字符串超长显示的解决方法
VB中的Unicode 和 Ansi 格式
优化程序显示速度
Visual Basic 产生渐层的 Form 背景
用VB实现客户——服务器(TCP/IP)
用VB制作注册软件的方法

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》