VC实现PPPOE拨号 pppoe拨号软件下载

背景:代替手工自动进行PPPOE拨号

相关知识:

主要使用的函数:

The RasDial function establishes a RAS connection between a RAS client and a RAS server. The connection data includes callback and user-authentication information

DWORD RasDial(

__in LPRASDIALEXTENSIONS lpRasDialExtensions,

__in LPCTSTR lpszPhonebook,

__in LPRASDIALPARAMS lpRasDialParams,

__in DWORD dwNotifierType,

__in LPVOID lpvNotifier,

__in LPHRASCONN lphRasConn

);

Return Value

If the function succeeds, the return value is ERROR_SUCCESS and a handle to the RAS connection is returned in the variable pointed to by lphRasConn .

If the function fails, the return value is from Routing and Remote Access Error Codes or Winerror.h.

更多消息请查看 :

http://msdn.microsoft.com/en-us/library/aa377004(VS.85).aspx

RASDIALPARAMS ms;

RASDIALPARAMS params;

HRASCONN handle=NULL;

memset(&ms, '', sizeof(params));

params.dwSize=sizeof(RASDIALPARAMS);

CString entryname;

CString tmp;

tmp.Format("%d", i);

entryname="UE"+tmp;//需要拨号的名称,也就是建立的宽带连接的名称,如UE0

strcpy(params.szEntryName,entryname);

strcpy(params.szPhoneNumber,"");

strcpy(params.szCallbackNumber,"");

strcpy(params.szUserName,"tm500"); //用户名

strcpy(params.szPassword, "tm500"); //密码

strcpy(params.szDomain, "");

Message +="n"+entryname+"dailying up ......";

UpdateData(TRUE);

//指定的拨号连接。

int a =RasDial(NULL, NULL, &params, NULL, NULL, &handle);

if (a!=ERROR_SUCCESS)

{

MessageBox("正在拨打的计算机没有应答,稍后请再试");

Message +="n"+entryname+"dailying up failed......n";

UpdateData(TRUE);

DWORD off=RasHangUp(handle);

//SendMessage(WM_CLOSE);

if (off==0)

{

MessageBox("连接已断开");

//printf("连接已断开...n");

}

else{

//printf("断开连接出错...n");

MessageBox("断开连接出错.");

}

}

-----------------------------------------------------------------------------------------------------------------------------------------

RAS协议:

远程访问服务(RAS)是Windows 9X/NT/2000操作系统提供的系统服务器之一,通过电话线可以使单独的计算机接入网络,或通过两个RAS对拨使两个局域网互连,此项服务的功能可以 使远程的计算机以较低的费用同网络连接,而且一旦建立了RAS连接,则可以使用其它的几乎所有的网络函数,对用户来说,实际上和通过网卡在基于网中进行数 据传输是一样的。

拨号和连接管理:

1. 拨号函数 : RasDial

DWORD RasDial(

LPRASDIALEXTENSIONS lpRasDialExtensions,

LPCRSTR lpszPhonebook,

LPRASDIALPARAMS lpRasDialParams,

DWORD dwNotifierType,

LPVOID lpvNotifier,

LPHRASCONN lphRasConn);

参数说明:

(1)lpRasDialExtensions为RASDIALEXTENSIONS结构体变量

typedef struct tagRASDIALEXTENSIONS{

DWORD dwSize;//必须设置为RASDIALEXTENSIONS结构体的长度(按字节)

DWORD dwfOptions;//允许为使用RASDIAL扩展特性而设置为标志

HWND hwndParent;//不用,应该设置NULL字符

ULONG_PTR reserved;//不用,应该设置0

#if(WINVER>=0x500)

ULONG_PTR reserved1;保留 应该设置0

RASEAPINFO RasEapInfo;//Windows 2000上,允许指定"扩展性身份验证协议"(EAP)信息

#endif

}RASDIALEXTENSIONS;

(2)lpRasDialParams

lpRasDialParams为结果RASDIALPARAMS变量

typedef struct _RASDIALPARAMS

{

DWORD dwSize;//结构体长度(按字节).有了这个标志,RAS便可以对程序使用的操作系统平台版本进行内部判断。因为不同的操作系统,这个结构体是不一样的

TCHAR szEntryName[RAS_MaxEntryName+1];//允许标志一个电话薄条目,该条目包含在RASDIAL函数的 lpszPhonebook参数列出的电话薄文件内。该参数比较重要,因为电话薄条目能够使用户更好地指定RAS连接属性。如选定一个Modem或者一个 分帧协议等,但是,为了使用RasDial而指定一个电话薄条目并不是非用不可,可以选择使用。如果该字段为空,RasDial就会选择系统上安装的第一 个可以使用的Modem,并依据下一个参数szPhoneNumber来拨叫连接

TCHAR szPhoneNumber[RAS_MaxPhoneNumber+1];//代表一个电话号码,优先于szEntryName指定的电话薄条目内包含的电话号码

TCHAR szCallbackNumber[RAS_MaxCallbackNumber+1];//允许指定一个电话号码,RAS服务器可以给据这个号码回拨,如果RAS服务器允许有一个回拨号码,他就中断原来的连接,利用指定的回拨号码回拨。这个特性非常有用,因为服务器可以知道连接的用户来自何处。

TCHAR szUserName[UNLEN+1];//标志RAS服务器上的用户进行身份验证时所用的登陆名

TCHAR szPassword[PWLEN+1];//标志RAS服务器上的用户进行身份验证所用的密码

TCHAR szDomain[DNLEN+1];//可选项,指定最初的电话薄字条目拨叫一个RAS多链路连接

#if(WINVER>=0x401)

DWORD dwSubEntry;//标志用户帐号所在的Windows 2000或者NT区域

ULONG_PTR dwCallbackId;//允许把一个应用程序定义的值投递到一个RasDidalFunc2回拨函数中

#endif

}RASDIALPARAMS;

(3)lpszPhonebook:识别到一个电话薄文件的路径

2. 断开拨号函数 : RasHangUp

DWORD RasHangUp(HRASCONN hrasconn);//hrasconn正在连接的句柄,也就是在上一个函数中的最后一个参数hRasConn所得到的值

3. 获取连接状态函数 : RasGetConnectStatus

DWORD RasGetConnectStatus(HRASCONN hrasconn,LPRASCONNSTATUS Iprasconnstatus);

Iprasconnstatus为一个结构体RASCONNSTATUS,它取得当前连接状态

typedef struct _RASCONNSTATUS{

DWORD dwSize;//结构体大小

RASCONNSTATE rasconnstate;//一种连接状态

DWORD dwError;//返回值不是0,就取得具体的错误代码

TCHAR szDeviceType[RAS_MaxDeviceType+1];//连接所用的设备类型

TCHAR szDeviceName[RAS_MaxDeviceName+1];//当前设备名称

}RASCONNSTATUS

RAS的活动连接状态有很多。连接有3种活动状态:运行,暂停,中止

运行:RasDial调用仍在进程当中,每一处运行状态活动都将提供进程状态分析

暂停:表示RasDial需要更多的信息来建立连接,默认设置是取消暂停状态。在RASDIALEXTENSIONS结构中设置RDEOPT_PauseStates标志,便可以启用通知进程。当连接处于暂停状态时,可能有如下原因 :

1 因为身份验证失败,用户需要提供新的登陆凭证

2 密码过期,需要一个新密码

3 用户密码需要提供一个回拨号码

中止: 表示RasDial拨号失败,或者RasHangUp函数关闭连接

4. 枚举连接函数 : RasEnumConnections : 列出所有活动的RAS连接

DWORD RasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections);

5. 子连接句柄RasGetSubEntryHandle

该函数允许为多连接中一个具体的字条目取得一个连接句柄,远程访问服务器利用这个投影信息来表示网络上的一个远程客户机,比如说,在一个分帧协议上建立一个连接的时候,这个连接采用的是IP协议,IP配置信息(如 分配的ip地址)就会从RAS服务器到客户机之间建立起来。要想获得PPP(点对点)分帧协议上的协议投影信息,就可以使用管理连接函数中的第3个函数 RasGetProjectionInfo。

6. RasGetProjectionInfo:

DWORD RasGetProjectionInfo(

HRASCONN hrasconn, //连接句柄

RASPROJECTION rasprojection, //枚举类型

LPVOID lpprojection, //取得一个数据结构该结构和rasprojection中指定的枚举类型有关联

LPDWORD lpcb //该函数返回时,变量Lpcb会得到包含获得投影信息所需要的缓冲区长度

);

相关函数:

1. RasEnumEntries :

Ras规定要获得所有连接,必须连续两次调用RasEnumEntries函数,第一次要获得需要的缓冲区的大小,然后申请该缓冲区;在第二次调用的时候才能够真正获得所有的连接。

2. 增加新的连接主要通过调用 :

RasCreatePhonebookEntry(GetSafeHwnd(), sCurrentProvider);//新建拨号连接

3 删除连接 :

{

//结构体

typedef DWORD (WINAPI* RDE)

(
VC实现PPPOE拨号 pppoe拨号软件下载

LPCTSTR lpszPhonebook, // pointer to full path and filename of

LPCTSTR lpszEntry // pointer to an entry name to delete

);

// 载入动态库

HINSTANCE hLib = LoadLibrary(_T("RASAPI32.DLL"));

if (NULL == hLib) return;

RDE rde = (RDE) GetProcAddress(hLib, "RasDeleteEntryA");

if (rde != NULL)

{

rde(NULL, sCurrentProvider);

QueryConnections();//查询连接状态

QueryPhones(sCurrentProvider);////查询目前的拨号情况

}

::FreeLibrary(hLib);

}

4. 编辑已有连接 :

RasEditPhonebookEntry(GetSafeHwnd(), NULL, sCurrentProvider);//编辑已有连接

5. 拨号 :

{

RASDIALPARAMS rdParams;

char szBuf[256] = "";

//--------------------------------------------------------------------------------

ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));

rdParams.dwSize = sizeof(RASDIALPARAMS);

//允许标志一个电话薄条目,该条目包含在RASDIAL函数的lpszPhonebook参数列出的电话薄文件内

//该参数比较重要,因为电话薄条目能够使用户更好地指定RAS连接属性。如选定一个Modem或者一个分帧协议等,

//但是,为了使用RasDial而指定一个电话薄条目并不是非用不可,可以选择使用。如果该字段为空,

//RasDial就会选择系统上安装的第一个可以使用的Modem,并依据下一个参数szPhoneNumber来拨叫连接

//lstrcpy(rdParams.szEntryName, sCurrentProvider);//

//rdParams.szPhoneNumber 代表一个电话号码,优先于szEntryName指定的电话薄条目内包含的电话号码

int pd = atoi(theApp.GetIniString(gchMain, gchPulseDialing, "1"));

if (1 == pd)

lstrcpy(rdParams.szPhoneNumber, CString("P") + GetPhoneListSelection());

else

lstrcpy(rdParams.szPhoneNumber, GetPhoneListSelection());

//--------------------------------------------------------------------------------

CString un, pw;

un = theApp.GetIniString(sCurrentProvider, "UserName", "");

pw = theApp.GetPassword(TRUE);

lstrcpy(rdParams.szUserName, un);//标志RAS服务器上的用户进行身份验证时所用的登陆名

lstrcpy(rdParams.szPassword, pw);//标志RAS服务器上的用户进行身份验证所用的密码

//--------------------------------------------------------------------------------

//允许指定一个电话号码,RAS服务器可以给据这个号码回拨,如果RAS服务器允许有一个回拨号码,他就中断原来的连接,利用指定的回拨号码回拨

//这个特性非常有用,因为服务器可以知道连接的用户来自何处

rdParams.szCallbackNumber[0] = '*';

rdParams.szDomain[0] = '*';//可选项,指定最初的电话薄字条目拨叫一个RAS多链路连接

//--------------------------------------------------------------------------------

//拨号

DWORD dwRet;

dwRet = RasDial(NULL,

NULL,

&rdParams,

0L,

(LPVOID)RasDialFunc,

&hRasConn);

//--------------------------------------------------------------------------------

if (dwRet)

{

if (RasGetErrorString((UINT)dwRet, (LPSTR)szBuf, 256) != 0)

m_LastCallText = szBuf;

}

return TRUE;

}

//回调函数

VOID WINAPI RasDialFunc(UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError)

{

TRACE("RasDialFuncn");

if (unMsg != WM_RASDIALEVENT) TRACE("Strange event!n");

TRACE("RasDialFunc - exitn");

}

6. 挂断拨号连接函数 :

RasHangUp(hRasConn);//中心函数()

RasGetConnectStatus(hRasConn, &rStatus);//获取连接状态函数

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/168742.html

更多阅读

iphone6软件下载 iphone手机如何使用

iphone6软件下载——简介此方法运用于iphone6无需越狱,软件下载。iphone6软件下载——工具/原料iphone6爱思助手移动版iphone6软件下载——方法/步骤iphone6软件下载 1、iphone6打开iphone6软件下载 2、选择需求iphone6软件下载 3

国泰君安繁体版A股证券软件下载 国泰君安 a股

2013年4月1日,居住在境内的港澳台居民可以开立A股账户,但不少港澳台居民电脑操作系统是繁体版的,A股证券软件大都是简体版的,导致繁体操作系统在下载证券行情软件和交易软件这两个最基本的软件时发生乱码。不少客户都希望有繁体版的证券

怎么把mp3声音变大 mp3音量增大软件下载 mp3音量增大软件

下载的歌曲声音小怎么办?很多喜欢听歌的小伙伴都会遇到这样的情况,当然同为喜欢听歌的我也一样,于是乎我就把电脑的音量还有播放器的音量都调大,结果依旧,效果还是不明显,听着难受。后来我就找到了怎么把mp3声音变大的方法,届时,现在就来跟

声明:《VC实现PPPOE拨号 pppoe拨号软件下载》为网友巴黎环抱的花海分享!如侵犯到您的合法权益请联系我们删除