撥號上網程式 (轉)
關鍵詞:Visual C++
大家知道,ants、 Expert等中都帶有定時撥號上網軟體的功能。而
一般的撥號上網,利用的是的Remote Access Service(RAS,訪問服務)。
下面介紹一下其在Visual C++下的實現。
Visual C++為我們提供了包含RAS 宣告的“ras.h″頭。要在中實現撥號
上網功能,其大致過程如下:
1. 利用Modem撥號進行連線,應使用RasDial。
其宣告如下:
D Ras Dial(LPRASDIALEXTENSIONS lpRas DialExtensions,LPCTSTR lpszPhoneboo
k,LPRASDIALPARAMS lp Ras DialParams,DWORD dw Notifier Type,LPVOID lpv Notifier,
LPHRANN lph Ras Conn )
引數說明:
lpRasDialExtensions和lpszPhonebook:僅在下有效,在Windows 95下,這
兩個引數被忽略。
lpRasDialParams:這個引數很重要,它指向一個RASDIALPARAMS結構,該結構包含以下
幾個成員:
dwSize:應設定為sizeof(RASDIALPARAMS);
szEntryName和szPhoneNumber:這兩個引數有聯絡,szEntryName可以指定要建立的連線
,比方說“我的連線”等等,這是處理使用者已經在“撥號”裡建立的連線的。這時,Mo
dem將撥打你在“我的連線”中設定的ISP號碼,此時szPhoneNumber成員設為空字串“”即
可;如果你要在程式中自行指定要撥打的ISP號碼的話,szEntryName可以設定為空字串“
”,此時應設定szPhoneNumber為你的ISP號碼(169,663等),特別的,對於用201電話卡來
上網的情況,可以設為“201,,,賬號,密碼#,,ISP號碼#”(其中“,”表示停頓一段時
間(以等待確認賬號,密碼等),你可以根據自己所在位置的線路狀況自行調節。
SzCallBackNumber,szain:設為空串“”即可。
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;
在,Visual C++ 6.0下透過。
這樣,一個實現基本撥號上網功能的程式就完成了。如果你要了解更多有關情況或服務
器端,可以參考MSDN→PlatfoSDK→Networking and Distributed Services→R
emote Access Service的有關內容
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988588/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- win10撥號上網如何設定_win10設定撥號上網的步驟Win10
- Linux系統下使用pppd撥號上網Linux
- 電腦開機自動撥號上網怎麼設定?電腦自動撥號上網的設定方法步驟
- win10開機怎麼自動撥號_win10怎麼自動撥號上網Win10
- linux gprs模組 sim800a 晶片 ppp撥號上網Linux晶片
- win10系統下怎麼進行寬頻撥號上網Win10
- 撥號vps,遠端連線撥號vps的方法及其步驟
- 什麼是撥號vps
- HTML input tel 撥號域HTML
- ADSL 撥號代理的搭建
- openwrt 撥號失敗問題
- Vps撥號伺服器,Vps撥號伺服器的優點及其連線方法伺服器
- 混撥vps與單城市撥號vps有什麼區別?
- win10怎麼撥號上網651 win10寬頻連線錯誤651解決方法Win10
- ubuntu18.04進行pppoe撥號Ubuntu
- Linux下pppd撥號指令碼配置Linux指令碼
- Linux 使用pppd和ppp程式進行3G/4G撥號Linux
- 什麼是撥號vps伺服器伺服器
- 如何連線vps撥號伺服器伺服器
- 如何選擇撥號VPS伺服器!伺服器
- FreeSWITCH測試撥號規則例項
- 從撥號上網到創立估值55億美元獨角獸,Transformer作者萬字訪談聊AI趨勢ORMAI
- 函數語言程式設計 - 玩轉高階回撥函式函數程式設計函式
- 接入微信公眾號登入-回撥
- 查詢手機號碼是否支援攜號轉網的API介面API
- Win11自動撥號的實現(教程)
- 什麼是撥號vps?如何遠端連線?
- 怎麼有效連線vps撥號伺服器?伺服器
- adsl動態撥號伺服器是什麼伺服器
- 在ARM+LINUX上使用pppd拔號上網(GPRS)流程Linux
- 【轉】cmd中%號和雙引號轉義
- HTML5實現DTMF(電話撥號按鍵訊號)解碼、編碼,程式碼簡單易於移植HTML
- 攜號轉網來啦!工信部:2019年底前實現手機使用者自由攜號轉網
- win10寬頻連線不上怎麼辦_win10寬頻撥號連線不上如何解決Win10
- 撥號VPS中691的可能原因及解決方法?
- 什麼是撥號VPS伺服器?如何連線?伺服器
- 金匯捷金錢豹龍王戰神程式app撥號精靈下載說明APP
- 網站底部備案號html程式碼網站HTML
- 【Linux網路程式設計-1】訊號Linux程式設計