社区
网络编程
帖子详情
求ADSL拨号程序源代码!
taotao7805
2005-01-06 03:35:36
哪位知道哪有呀?告诉小弟,先谢了!
...全文
701
6
打赏
收藏
求ADSL拨号程序源代码!
哪位知道哪有呀?告诉小弟,先谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taotao7805
2005-01-07
打赏
举报
回复
up
zhangqu_980371
2005-01-07
打赏
举报
回复
[转]
序:近日,有位朋友问到用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)
file://afx_msg_map(****)
……
on_registered_message(wm_rasevent, onrasdialevent)(<-加入此句)
file://afx_msg_map
end_message_map()
加入成员函数处理消息:
lresult cdialinfo::onrasdialevent(wparam wp, lparam lp)
{
rasconnstate rasstate= (rasconnstate)wp;
clistbox *info =(clistbox *)getdlgitem(idc_infolist);
file://用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;
file://可定义类型为hrasconn的成员变量m_hrasconn来保存ras连接的句柄。
file://在调用rasdial时用指向m_hrasconn的指针作为lphrasconn参数。
file://既然用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的有关内容
taotao7805
2005-01-06
打赏
举报
回复
我要的是windows下的原代码,哪有吗?
月吻长河
2005-01-06
打赏
举报
回复
Linux上有源代码:ra-pppoe 3.5
WINDOWS下提供源码的不多,自己用RAS API写很烦的。
taotao7805
2005-01-06
打赏
举报
回复
ADSL能行?
kingzai
2005-01-06
打赏
举报
回复
use RasDial
cnprogram.myrice.com/article/vc/vc521.html
C++ 自动
拨号
程序
源代码
C++ 自动
拨号
程序
源代码
一次偶然的机会,一个朋友要一个自动
拨号
断开的
程序
,联接指定的网页,以刷新指定网页的访问计数。使用的
拨号
控件是开源的DialUp.pas,只要建了一个包,加入这个文件后,就可以编译建立TDialUp控件。于是写了这个
程序
,内置FHRasConn数据成员,用于存放当前活动链接的句柄,主要是通过个句柄取得当前连接的IP地址。用自己家的
ADSL
来测试,最后,测试OK了。这个
程序
没有新意的地方,就拿来共享给大家了,希望能对大家有所帮助。这里包括所有的
源代码
。
C#自动
拨号
【
ADSL
】【
源代码
】
C#自动
拨号
【
ADSL
】【
源代码
】,不错的源码
第01章-互联网的概述(历史发展+技术发展+常见应用)
课程内容包括互联网发展的历史(产生过程、发展过程);互联网的接入方式(电话
拨号
接入和ISDN接入)、(Cable Modem和局域网接入)、(Cable Modem和局域网接入);
ADSL
理论及调试技术;互联网的应用(www)、(E-mail理论部分)、(E-mail试验部分Outlook Express环境搭建)等。
ADSL
自动
拨号
断线的
源代码
一次偶然的机会,一个朋友要一个自动
拨号
断开的
程序
,联接指定的网页,以刷新指定网页的访问计数。于是写了这个
程序
,没有测试就给了他,根本不能用。没有办法,只好把自己家的
ADSL
拿来测试,结果又不记得
ADSL
密码,哎,只有打电话给电信,改密码等等。最后,测试OK了。
这个
程序
没有新意的地方,就拿来共享给大家了,希望能对大家有所帮助。这里包括所有的
源代码
。
Zdhsoft(祝冬华) 2008-3-18,如果您修改的更好,请您发一份给我,谢谢;zdhsoft@163.com
adsl
拨号
器的C#
源代码
1: class AutoDialer 2: { 3: public void Connect(string connectionName, string user, string pass) 4: { 5: string arg = string.Format("rasdial \"{0}\" {1} {2}", connectionName, user, pass); 6: InvokeCmd(arg); 7: } 8: 9: public void Disconnect(string connectionName) 10: { 11: string arg = string.Format("rasdial \"{0}\" /disconnect", connectionName); 12: InvokeCmd(arg); 13: } 14: 15: private static string InvokeCmd(string cmdArgs) 16: { 17: Process p = new Process(); 18: p.StartInfo.FileName = "cmd.exe"; 19: p.StartInfo.UseShellExecute = false; 20: p.StartInfo.RedirectStandardInput = true; 21: p.StartInfo.RedirectStandardOutput = true; 22: p.StartInfo.RedirectStandardError = true; 23: p.StartInfo.CreateNoWindow = true; 24: p.Start(); 25: 26: p.StandardInput.WriteLine(cmdArgs); 27: p.StandardInput.WriteLine("exit"); 28: 29: return p.StandardOutput.ReadToEnd(); 30: } 31: }
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章