?? csdn_文檔中心_vc的撥號上網程序.htm
字號:
<TBODY>
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT src="CSDN_文檔中心_VC的撥號上網程序.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文檔中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>標題</FONT></TD>
<TD><B> VC的撥號上網程序</B> silver(轉貼)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>關鍵字</FONT></TD>
<TD width=500> VC的撥號上網程序</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出處</FONT></TD>
<TD height=10> <A
href="http://home.kzinfo.net/getc/200012/20001220017.htm">http://home.kzinfo.net/getc/200012/20001220017.htm</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章說明信息結束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<DIV><!--jcstart--> 大家知道,在Netants、DownLoad
Expert等軟件中都帶有定時撥號上網下載軟件的功能。而<BR>一般用戶的撥號上網,利用的是Windows的Remote Access
Service(RAS,遠程訪問服務)。<BR>下面介紹一下其在Visual C++下的實現。 <BR> Visual
C++為我們提供了包含RAS API聲明的“ras.h″頭文件。要在程序中實現撥號<BR>上網功能,其大致過程如下: <BR> 1.
利用Modem撥號進行連接,應使用RasDial函數。 <BR> 其聲明如下: <BR> DWORD Ras
Dial(LPRASDIALEXTENSIONS lpRas DialExtensions,LPCTSTR
lpszPhoneboo<BR>k,LPRASDIALPARAMS lp Ras DialParams,DWORD dw
Notifier Type,LPVOID lpv Notifier, <BR> LPHRASCONN lph Ras Conn )
<BR> 參數說明: <BR> lpRasDialExtensions和lpszPhonebook:僅在Windows
NT下有效,在Windows 95下,這<BR>兩個參數被忽略。
<BR> lpRasDialParams:這個參數很重要,它指向一個RASDIALPARAMS結構,該結構包含以下<BR>幾個成員:
<BR> dwSize:應設定為sizeof(RASDIALPARAMS);
<BR> szEntryName和szPhoneNumber:這兩個參數有聯系,szEntryName可以指定要建立的連接<BR>,比方說“我的連接”等等,這是處理用戶已經在“撥號網絡”里建立的連接的。這時,Mo<BR>dem將撥打你在“我的連接”中設定的ISP號碼,此時szPhoneNumber成員設為空字符串“”即<BR>可;如果你要在程序中自行指定要撥打的ISP號碼的話,szEntryName可以設定為空字符串“<BR>”,此時應設置szPhoneNumber為你的ISP號碼(169,663等),特別的,對于用201電話卡來<BR>上網的情況,可以設為“201,,,賬號,密碼#,,ISP號碼#”(其中“,”表示停頓一段時<BR>間(以等待確認賬號,密碼等),你可以根據自己所在位置的線路狀況自行調節。
<BR> SzCallBackNumber,szDomain:設為空串“”即可。
<BR> SzUserName,szPassword:登錄用戶名和密碼。如169公用賬號guest,guest。
<BR> 其他成員不必設置。
<BR> DwNotifierType:指定是由窗口還是由回調函數來處理確認消息。通過確認消息我們可<BR>以得到RasDial過程的當前狀態。如“正在打開段口”,“正在驗證用戶名和密碼”等。也可<BR>設為NULL。
<BR> dwNotifier:指定處理確認消息的窗口或回調函數。也可設為NULL。
<BR> LphRasConn:指向一個類型為HRASCONN的變量。在調用RasDial前必須指定為NULL,Ras<BR>Dial若成功返回,則將RAS連接的句柄存放于它所指向的變量中。我們也可以通過此句柄來斷<BR>開連接。
<BR> 只要在程序中適當位置調用RasDial函數即可建立連接。 <BR> 2. 理確認消息以得到撥號過程的當前狀態。
<BR> 我們以指定窗口來處理確認消息為例說明如何得到撥號過程的當前狀態。
<BR> 在處理確認消息的對話框類(或視圖類等)的實現代碼中加入: <BR> const UINT WM_RASEVENT =
::RegisterWindowMessageA(RASDIALEVENT); <BR> 在Message
Map中手工加入消息映射:(****是你定義的對話框類名稱) <BR> BEGIN_MESSAGE_MAP(****,
CDialog) <BR> //AFX_MSG_MAP(****) <BR> ……
<BR> ON_REGISTERED_MESSAGE(WM_RASEVENT, OnRasDialEvent)(<-加入此句)
<BR> //AFX_MSG_MAP <BR> END_MESSAGE_MAP() <BR> 加入成員函數處理消息:
<BR> LRESULT CDialInfo::OnRasDialEvent(WPARAM wp, LPARAM lp)
<BR> { <BR> RASCONNSTATE rasstate= (RASCONNSTATE)wp;
<BR> CListBox *info =(CListBox *)GetDlgItem(IDC_INFOLIST);
<BR> //用ListBox 控件(ID為IDC-INFOLIST)來顯示狀態) <BR> switch(rasstate)
<BR> { <BR> case RASCS_OpenPort:
<BR> info→AddString(_T(″打開端口……″)); <BR> break; <BR> case
RASCS_PortOpened: <BR> info→AddString(_T(″端口已打開.″)); <BR> break;
<BR> case RASCS_ConnectDevice: <BR> info→AddString(_T(″連接設備……″));
<BR> break; <BR> case RASCS_DeviceConnected:
<BR> info→AddString(_T(″設備已連接.″)); <BR> break; <BR> case
RASCS_Authenticate: <BR> info→AddString(_T(″驗證用戶及密碼″));
<BR> break; <BR> case RASCS_Authenticated:
<BR> info→AddString(_T(″通過″)); <BR> break; <BR> case
RASCS_Connected: <BR> info->AddString(_T(″已連接″)); <BR> reak;
<BR> case RASCS_Disconnected:
<BR> info->AddString(_T(″連接已斷開″)); <BR> m_hRasConn=NULL;
<BR> //可定義類型為HRASCONN的成員變量m_hRasConn來保存RAS連接的句柄。
<BR> //在調用RasDial時用指向m_hRasConn的指針作為lphRasConn參數。
<BR> //既然用m_hRasConn來保存連接句柄,連接斷開后應重置為NULL. <BR> break;
<BR> default: <BR> return (LRESULT)0; <BR> } <BR> return
(LRESULT)0; <BR> } <BR> 3. 斷開連接: <BR> if (m_hRasConn != NULL)
<BR> { <BR> RasHangUp(m_hRasConn); <BR> m_hRasConn = NULL;
<BR> m_OnDial=TRUE; <BR> :Sleep(2000); <BR> } <BR> 注意 :
<BR> 你也許注意到了以上代碼中的Sleep函數,這里是必需的。需要一定時間來斷開連接。如<BR>果不等待一段時間,計算機有可能無法正常關閉端口。導致下一次無法撥號,只有重新啟動<BR>Windows才能解決。要預防此問題也可以調用RasGetConnectStatus函數,方法如下:
<BR> RASCONNSTATUS rStatus;
<BR> while(RasGetConnectStatus(m_hRasConn,&rStatus)!=ERROR_INVALID_HANDLE)<BR><BR> {
<BR> ::Sleep(0); <BR> } <BR> 4.在以下情況下: <BR> ①
瀏覽網頁時有時會出現停止響應,重啟explorer后任務欄上的連接狀態圖標也許會消<BR>失。 <BR> ②
希望在連接成功后,退出程序,再次執行此程序可選擇斷開連接。
<BR> 可以調用RasEnumConnection函數來得到當前連接的句柄。 <BR> 舉例如下: <BR> HRASCONN
hRasConnect;DWORD dwBuffferSize, dwNumofConnections;//緩沖區大小,連<BR>接數
<BR> LPRASCONN lpRasConn; <BR> lpRasConn = new
RASCONN[3】;//最多可得到3個連接句柄,客戶端程序其實不必設為<BR>3,因連接數有限,大部分僅一個連接。
<BR> lpRasConn[0】.dwSize = sizeof(RASCONN); <BR> dwBuffferSize =
32* sizeof(RASCONN);//求出由3個RASCONN結構構成的緩沖區大小
<BR> RasEnumConnections(lpRas Conn, &dw Buffer Size, &dw Numof
Connections);//<BR>此函數若成功則返回零。 <BR> for(DWORD i=0; i {
<BR> hRasConnect =
lpRasConn[i】.hrasconn;//RASCONN結構的hrasconn成員為RAS連接句<BR>柄 <BR>
RasHangUp(hRasConnect); <BR> ::Sleep(2000); <BR> } <BR> delete
[】 lpRasConn; <BR> 在Windows 98,Visual C++ 6.0下調試通過。
<BR> 這樣,一個實現基本撥號上網功能的程序就完成了。如果你要了解更多有關情況或服務<BR>器端程序設計,可以參考MSDN→Platform
SDK→Networking and Distributed Services→R<BR>emote Access
Service的有關內容<BR><BR></DIV><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>對該文的評論</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文檔中心_VC的撥號上網程序.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要評論</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你沒有登陸,無法發表評論。 請先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=2740">登陸</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注冊</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">網站簡介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">廣告服務</A> - <A
href="http://www.csdn.net/map/map.shtm">網站地圖</A> - <A
href="http://www.csdn.net/help/help.asp">幫助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">聯系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文檔中心_VC的撥號上網程序.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百聯美達美公司 版權所有 京ICP證020026號</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--內容結束//--><!--結束//--></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -