开发一个类似上网拨号程序.

lifei 2000-07-13 09:48:00
开发一个类似win95/98系统中的上网拨号程序.实现自动拨号登录远程nt服务器.
关键技术是:电话拨号、通信协议、登陆的具体实现,最好是用C++语言编写。
...全文
127 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
su 2000-07-14
  • 打赏
  • 举报
回复

  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函数,方法如下:
  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下调试通过。
U皮特U 2000-07-14
  • 打赏
  • 举报
回复
我的主页上有源码可以参考:
http://go.163.com/~freecode/vc/sharecode/netcomm/dial.zip
此文件分为2部分 part1 = http://download.csdn.net/source/2362571 含本书全部源码(1-16章) 共399个实例:第1章 窗体与界面设计  1.1 菜单应用实例  cc实例001 在系统菜单中添加菜单项  cc实例002 带图标的程序菜单   cc实例003 根据表中数据动态生成菜单  cc实例004 浮动的菜单  1.2 弹出菜单应用实例  cc实例005 在控件上单击右键弹出菜单  cc实例006 个性化的弹出菜单  cc实例007 任务栏托盘弹出菜单  1.3 工具栏应用实例  cc实例008 带背景的工具栏  cc实例 009 带图标的工具栏  cc实例010 带下拉菜单的工具栏  cc实例011 可调整按钮位置的工具栏  cc实例012 浮动工具栏  cc实例 013 根据表中数据动态生成工具栏  cc实例014 具有提示功能的工具栏  1.4 状态栏应用实例  cc实例015 带进度条的状态栏  cc 实例016 动画效果的状态栏  cc实例017 滚动字幕的状态栏  1.5 导航界面应用实例  cc实例018 Outlook导航界面  cc实例019 树状导航界面  cc实例020 按钮导航界面  cc实例021 类QQ导航菜单  1.6 界面窗体应用实例  cc实例022 背景为渐变色的程序界面  cc实例023 椭圆形的程序界面  cc实例024 自绘窗体界面  cc实例025 类似WindowscXP的程序界面  cc 实例026 窗体融合技术  cc实例027 限制对话框最大时的窗口大小  1.7 多媒体宣传光盘应用实例  cc实例028 多媒体宣传光盘主界面  cc实例029 自动运行的多媒体宣传光盘  1.8 多媒体触摸屏程序应用实例  cc实例030 采购中心多媒体触摸屏程序  cc实例031 为触摸屏程序添加虚拟键盘  1.9 窗体位置应用实例  cc实例032 不可移动的窗体  cc实例033 始终在最上面的窗体  cc实例034 动画显示窗体  cc实例035 以时钟显示界面窗体  1.10 窗体标题栏应用实例  cc实例036 闪烁的窗体标题栏  cc实例037 拖动没有标题栏的窗体  cc实例038 禁用标题栏上的最大化.c最小化或关闭按钮  1.11 窗体形状及应用  cc实例039 半透明窗体  cc实例 040 创建字型窗体  cc实例041 百叶窗窗体  cc实例042 类似Office助手 第2章 控件应用  2.1 按钮控件典型实例  cc 实例043 AVI动画按钮  cc实例044 GIF动画按钮  cc实例045 图文按钮  cc实例046 不规则按钮  2.2 EditBox 控件典型实例  cc实例047 为EditBox设置新的系统菜单  cc实例048 为EditBox控件添加列表选择框  cc实例049 多彩边框的编辑框  cc实例050 改变编辑框文本颜色  2.3 ListBox控件典型实例  cc实例051 利用ListBox控件实现标签式数据选择  cc实例052 在ListBox控件间实现数据交换  cc实例053 列表项的提示条  2.4 ComboBox控件典型实例  cc实例 054 将数据表中的字段添加到ComboBox控件  cc实例055 带查询功能的ComboBox控件  cc实例056 自动调整组合框的宽度  cc实例057 颜色组合框  cc实例058 多列显示的组合框  2.5 ListControl控件典型实例  cc实例059 将数据库中的数据表添加到ListControl控件  cc实例060 利用ListControl控件浏览数据  cc实例061 利用ListControl控件制作导航界面  cc实例062 在列表视图中拖动视图项  cc实例063 利用列标题对列表视图进行数据排序  cc实例064 具有文本录入功能的 ListControl控件  2.6 TreeControl控件典型实例  cc实例065 多级数据库树状结构数据显示  cc实例066 可动态修改节点的树状结构  cc实例067 带复选功能的树状结构  cc实例068 显示磁盘目录  cc实例069 树型提示框  2.7  RichEdit控件典型实例  cc实例070 利用RichEdit显示Word文档  cc实例071 利用RichEdit控件实现文字定位与标识  cc实例072 利用RichEdit控件显示图文数据  2.8 图形类控件典型实例  cc实例073 图文数据录入  cc实例074 带有滚动条的图形控件  2.9 滚动条控件典型实例  cc实例075 自定义滚动条控件  2.10 控件
Visual C++程序开发范例宝典配套光盘,因大小受限,所以分成8部分上传,必须全部下载才能正常解压! 第1章 窗体与界面设计 1.1 菜单应用实例 实例001 在系统菜单中添加菜单项 实例002 带图标的程序菜单 实例003 根据表中数据动态生成菜单 实例004 浮动的菜单 1.2 弹出菜单应用实例 实例005 在控件上单击右键弹出菜单 实例006 个性化的弹出菜单 实例007 任务栏托盘弹出菜单 1.3 工具栏应用实例 实例008 带背景的工具栏 实例009 带图标的工具栏 实例010 带下拉菜单的工具栏 实例011 可调整按钮位置的工具栏 实例012 浮动工具栏 实例013 根据表中数据动态生成工具栏 实例014 具有提示功能的工具栏 1.4 状态栏应用实例 实例015 带进度条的状态栏 实例016 动画效果的状态栏 实例017 滚动字幕的状态栏 1.5 导航界面应用实例 实例018 Outlook导航界面 实例019 树状导航界面 实例020 按钮导航界面 实例021 类QQ导航菜单 1.6 界面窗体应用实例 实例022 背景为渐变色的程序界面 实例023 椭圆形的程序界面 实例024 自绘窗体界面 实例025 类似Windows XP的程序界面 实例026 窗体融合技术 实例027 限制对话框最大时的窗口大小 1.7 多媒体宣传光盘应用实例 实例028 多媒体宣传光盘主界面 实例029 自动运行的多媒体宣传光盘 1.8 多媒体触摸屏程序应用实例 实例030 采购中心多媒体触摸屏程序 实例031 为触摸屏程序添加虚拟键盘 1.9 窗体位置应用实例 实例032 不可移动的窗体 实例033 始终在最上面的窗体 实例034 动画显示窗体 实例035 以时钟显示界面窗体 1.10 窗体标题栏应用实例 实例036 闪烁的窗体标题栏 实例037 拖动没有标题栏的窗体 实例038 禁用标题栏上的最大化、最小化或关闭按钮 1.11 窗体形状及应用 实例039 半透明窗体 实例040 创建字型窗体 实例041 百叶窗窗体 实例042 类似Office助手 第2章 控件应用 2.1 按钮控件典型实例 实例043 AVI动画按钮 实例044 GIF动画按钮 实例045 图文按钮 实例046 不规则按钮 2.2 EditBox控件典型实例 实例047 为EditBox设置新的系统菜单 实例048 为EditBox控件添加列表选择框 实例049 多彩边框的编辑框 实例050 改变编辑框文本颜色 2.3 ListBox控件典型实例 实例051 利用ListBox控件实现标签式数据选择 实例052 在ListBox控件间实现数据交换 实例053 列表项的提示条 2.4 ComboBox控件典型实例 实例054 将数据表中的字段添加到ComboBox控件 实例055 带查询功能的ComboBox控件 实例056 自动调整组合框的宽度 实例057 颜色组合框 实例058 多列显示的组合框 2.5 ListControl控件典型实例 实例059 将数据库中的数据表添加到ListControl控件 实例060 利用ListControl控件浏览数据 实例061 利用ListControl控件制作导航界面 实例062 在列表视图中拖动视图项 实例063 利用列标题对列表视图进行数据排序 实例064 具有文本录入功能的ListControl控件 2.6 TreeControl控件典型实例 实例065 多级数据库树状结构数据显示 实例066 可动态修改节点的树状结构 实例067 带复选功能的树状结构 实例068 显示磁盘目录 实例069 树型提示框 2.7 RichEdit控件典型实例 实例070 利用RichEdit显示Word文档 实例071 利用RichEdit控件实现文字定位与标识 实例072 利用RichEdit控件显示图文数据 2.8 图形类控件典型实例 实例073 图文数据录入 实例074 带有滚动条的图形控件 2.9 滚动条控件典型实例 实例075 自定义滚动条控件 2.10 控件数组典型实例 实例076 向窗体中动态添加控件 实例077 公交线路模拟 第3章 图形技术 3.1 绘制图形 实例078 绘制正弦曲线 实例079 绘制艺术图案 实例080 画图程序 实例081 绘制立体模型 实例082 利用IFS算法绘制自然景物 3.2 图像预览 实例083 图片自动预览程序 实例084 图片批量浏览 实例085 浏览大幅BMP图片 实例086 放大和缩小图片 实例087 可随鼠标移动的图形 实例088 随图像大小变换的图像浏览器 3.3 图片效果 实例089 图片马赛克效果 实例090 图片百叶窗效果 实例091 电影胶片特效 实例092 翻
Visual C++程序开发范例宝典配套光盘,因大小受限,所以分成8部分上传,必须全部下载才能正常解压! 第1章 窗体与界面设计 1.1 菜单应用实例 实例001 在系统菜单中添加菜单项 实例002 带图标的程序菜单 实例003 根据表中数据动态生成菜单 实例004 浮动的菜单 1.2 弹出菜单应用实例 实例005 在控件上单击右键弹出菜单 实例006 个性化的弹出菜单 实例007 任务栏托盘弹出菜单 1.3 工具栏应用实例 实例008 带背景的工具栏 实例009 带图标的工具栏 实例010 带下拉菜单的工具栏 实例011 可调整按钮位置的工具栏 实例012 浮动工具栏 实例013 根据表中数据动态生成工具栏 实例014 具有提示功能的工具栏 1.4 状态栏应用实例 实例015 带进度条的状态栏 实例016 动画效果的状态栏 实例017 滚动字幕的状态栏 1.5 导航界面应用实例 实例018 Outlook导航界面 实例019 树状导航界面 实例020 按钮导航界面 实例021 类QQ导航菜单 1.6 界面窗体应用实例 实例022 背景为渐变色的程序界面 实例023 椭圆形的程序界面 实例024 自绘窗体界面 实例025 类似Windows XP的程序界面 实例026 窗体融合技术 实例027 限制对话框最大时的窗口大小 1.7 多媒体宣传光盘应用实例 实例028 多媒体宣传光盘主界面 实例029 自动运行的多媒体宣传光盘 1.8 多媒体触摸屏程序应用实例 实例030 采购中心多媒体触摸屏程序 实例031 为触摸屏程序添加虚拟键盘 1.9 窗体位置应用实例 实例032 不可移动的窗体 实例033 始终在最上面的窗体 实例034 动画显示窗体 实例035 以时钟显示界面窗体 1.10 窗体标题栏应用实例 实例036 闪烁的窗体标题栏 实例037 拖动没有标题栏的窗体 实例038 禁用标题栏上的最大化、最小化或关闭按钮 1.11 窗体形状及应用 实例039 半透明窗体 实例040 创建字型窗体 实例041 百叶窗窗体 实例042 类似Office助手 第2章 控件应用 2.1 按钮控件典型实例 实例043 AVI动画按钮 实例044 GIF动画按钮 实例045 图文按钮 实例046 不规则按钮 2.2 EditBox控件典型实例 实例047 为EditBox设置新的系统菜单 实例048 为EditBox控件添加列表选择框 实例049 多彩边框的编辑框 实例050 改变编辑框文本颜色 2.3 ListBox控件典型实例 实例051 利用ListBox控件实现标签式数据选择 实例052 在ListBox控件间实现数据交换 实例053 列表项的提示条 2.4 ComboBox控件典型实例 实例054 将数据表中的字段添加到ComboBox控件 实例055 带查询功能的ComboBox控件 实例056 自动调整组合框的宽度 实例057 颜色组合框 实例058 多列显示的组合框 2.5 ListControl控件典型实例 实例059 将数据库中的数据表添加到ListControl控件 实例060 利用ListControl控件浏览数据 实例061 利用ListControl控件制作导航界面 实例062 在列表视图中拖动视图项 实例063 利用列标题对列表视图进行数据排序 实例064 具有文本录入功能的ListControl控件 2.6 TreeControl控件典型实例 实例065 多级数据库树状结构数据显示 实例066 可动态修改节点的树状结构 实例067 带复选功能的树状结构 实例068 显示磁盘目录 实例069 树型提示框 2.7 RichEdit控件典型实例 实例070 利用RichEdit显示Word文档 实例071 利用RichEdit控件实现文字定位与标识 实例072 利用RichEdit控件显示图文数据 2.8 图形类控件典型实例 实例073 图文数据录入 实例074 带有滚动条的图形控件 2.9 滚动条控件典型实例 实例075 自定义滚动条控件 2.10 控件数组典型实例 实例076 向窗体中动态添加控件 实例077 公交线路模拟 第3章 图形技术 3.1 绘制图形 实例078 绘制正弦曲线 实例079 绘制艺术图案 实例080 画图程序 实例081 绘制立体模型 实例082 利用IFS算法绘制自然景物 3.2 图像预览 实例083 图片自动预览程序 实例084 图片批量浏览 实例085 浏览大幅BMP图片 实例086 放大和缩小图片 实例087 可随鼠标移动的图形 实例088 随图像大小变换的图像浏览器 3.3 图片效果 实例089 图片马赛克效果 实例090 图片百叶窗效果 实例091 电影胶片特效 实例092 翻

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧