Ras拨号程序编写

#include <stdio.h>
#include <windows.h>
#include <tchar.h>
#include <assert.h>
#include <Ras.h>
#pragma comment (lib,"rasapi32.lib")

#define ENTRY		TEXT("宽带连接123")
#define USER		TEXT("ADSL_User")
#define PASSWORD	TEXT("123456")

//创建PPPOE宽带连接
BOOL CreatePppoeConnection(LPCTSTR lpszEntry);
//设置拨号信息
void SetUserInfo(LPCTSTR lpszEntry, LPCTSTR lpszUserName, LPCTSTR lpszPassWord);
//连接宽带连接
UINT RasConnect(LPCTSTR lpszEntry, LPCTSTR lpszUserName, LPCTSTR lpszPassWord);

//调用已经创建的宽带连接拨号
bool RasConnect2(TCHAR szText[],TCHAR szUser[],TCHAR szPasswd[]);

int main(void)
{
	//创建连接ADSL
	BOOL ret=CreatePppoeConnection(ENTRY);
	//设置用户信息
	if(ret)
	{
		SetUserInfo(ENTRY, USER, PASSWORD);
		RasConnect(ENTRY, USER, PASSWORD);
	}

	RasConnect2(TEXT("宽带连接"),TEXT("059205587400"),TEXT("044998"));
	return 0;
}

//创建PPPOE宽带连接
BOOL CreatePppoeConnection( LPCTSTR lpszEntry )
{
	TCHAR sMSG[256]={0};
	//列举设备
	RASDEVINFO *pdevinfo = new RASDEVINFO[10];
	DWORD cb=10*sizeof(RASDEVINFO);
	DWORD num_devices=0;
	DWORD i=0;
	pdevinfo[0].dwSize = sizeof(RASDEVINFO);
	DWORD ret = RasEnumDevices(pdevinfo, &cb, &num_devices);
	if(ret != 0 || num_devices < 1) { delete pdevinfo; return FALSE; }
	
	for(i=0;i < num_devices;i++)
	{
		//	MessageBox(NULL, pdevinfo[i].szDeviceType, "宽带连接",MB_OK);
		if(_tcscmp(pdevinfo[i].szDeviceType,TEXT("pppoe"))==0)
			break;
	}
	if(i >= num_devices)
	{
		MessageBox(NULL, TEXT("pppoe设备未找到"), TEXT("宽带连接"),MB_OK);
		delete pdevinfo;
		assert(false);
		return FALSE;
	}
	//填充RASENTRY接口
	RASENTRY lpRasEntry;
	memset(&lpRasEntry, 0, sizeof(RASENTRY));
	lpRasEntry.dwSize = sizeof(RASENTRY);
	lpRasEntry.dwfOptions =RASEO_RemoteDefaultGateway | RASEO_ModemLights | RASEO_IpHeaderCompression | RASEO_SwCompression | RASEO_NetworkLogon;
	lpRasEntry.dwfOptions =RASEO_SpecificNameServers   |   RASEO_RemoteDefaultGateway |RASEO_PreviewUserPw;
	lpRasEntry.dwfNetProtocols = RASNP_Ip;		//TCPIP协议
	lpRasEntry.dwFramingProtocol = RASFP_Ppp;	//PPP方式
	_tcscpy(lpRasEntry.szDeviceType, pdevinfo[i].szDeviceType);
	_tcscpy(lpRasEntry.szDeviceName, pdevinfo[i].szDeviceName);
	_tcscpy(lpRasEntry.szLocalPhoneNumber,TEXT(""));

	ret = RasSetEntryProperties(NULL,lpszEntry,&lpRasEntry,sizeof(RASENTRY),NULL,0);
	delete pdevinfo;
	if(ret != 0)
	{
		MessageBox(NULL,TEXT("pppoe设备未找到"), TEXT("宽带连接"),MB_OK);
		assert(false);
		return FALSE;
	}

	return TRUE;

	/*
	RASEO_PreviewUserPw  //显示用户名和密码对话框
	RASEO_SpecificIpAddr //指定IP地址拨号
	*/
}

//设置拨号信息
void SetUserInfo( LPCTSTR lpszEntry, LPCTSTR lpszUserName, LPCTSTR lpszPassWord )
{
	RASDIALPARAMS rdParams;	//拨号连接的信息

	ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
	rdParams.dwSize = sizeof(RASDIALPARAMS);
	_tcscpy(rdParams.szEntryName, lpszEntry);
	_tcscpy(rdParams.szUserName, lpszUserName);
	_tcscpy(rdParams.szPassword, lpszPassWord);
	RasSetEntryDialParams(NULL,&rdParams,FALSE);
	return;
}

//连接宽带连接
UINT RasConnect( LPCTSTR lpszEntry, LPCTSTR lpszUserName, LPCTSTR lpszPassWord )
{
	HRASCONN hRasConn = NULL;
	RASDIALPARAMS rdParams;		//拨号连接的信息

	ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
	rdParams.dwSize = sizeof(RASDIALPARAMS);
	lstrcpy(rdParams.szEntryName, lpszEntry);
	lstrcpy(rdParams.szUserName, lpszUserName);
	lstrcpy(rdParams.szPassword, lpszPassWord);

	DWORD dwRet;
	dwRet = ::RasDial(NULL, NULL, &rdParams, 0L, NULL , &hRasConn);  //如果函数成功,则返回0
	if (dwRet)
	{
		TCHAR szErroInfo[256]={0};
		_sntprintf_s(szErroInfo,ARRAYSIZE(szErroInfo),TEXT("%d连接错误!\n"),dwRet);
		TCHAR  szBuf[256] ={0};
		RasGetErrorString((UINT)dwRet,szBuf, ARRAYSIZE(szBuf));
		_tcscat(szErroInfo,szBuf);
		MessageBox(NULL, szErroInfo, TEXT("宽带连接"),MB_OK);
		assert(false);
		return false;
	}

	return true;
}

bool RasConnect2( TCHAR szText[],TCHAR szUser[],TCHAR szPasswd[])
{

	// 同步调用方式
	RASDIALPARAMS RasDialParams={0};
	// 总是设置dwSize 为RASDIALPARAMS结构的大小
	RasDialParams.dwSize = sizeof(RASDIALPARAMS);
	HRASCONN hRasConn = NULL; 
	lstrcpy(RasDialParams.szEntryName, szText); 
	lstrcpy(RasDialParams.szUserName, szUser);
	lstrcpy(RasDialParams.szPassword, szPasswd);

	// 同步方式调用RasDial(第五个参数为NULL)
	DWORD Ret = RasDial(NULL, NULL, &RasDialParams, 0, NULL, &hRasConn);
	if (Ret != 0) 
	{ 
		printf("RasDial失败: Error = %d\n", Ret);
		assert(false);
		return false;
	}

	// 获取连接状态
	RASCONNSTATUS RasStatus;
	RasStatus.dwSize = sizeof (RASCONNSTATUS);
	DWORD dwReturn = RasGetConnectStatus (hRasConn, &RasStatus);
	if (dwReturn)
	{
		printf("RasGetConnectStatus失败: Error = %d\n", dwReturn);
		assert(false);
		return false;
	}
	else if (dwReturn==0)
	{
		printf("连接成功\n");
	}

	//断开连接
	//RasHangUp(hRasConn);
	return true;	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值