青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 298  文章 - 377  trackbacks - 0
<2013年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(34)

隨筆分類

隨筆檔案

文章檔案

相冊

收藏夾

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

首先是用ICMP檢查網絡是否連通:

bool Util::CheckInternet()
{
    
char *SendData = "Data Buffer";
    LPVOID ReplyBuffer;
    DWORD dwRetVal;
    HANDLE hIcmpFile;
    
bool b=false;
    
if ((hIcmpFile = IcmpCreateFile()) == INVALID_HANDLE_VALUE)
        
return false;

    ReplyBuffer 
= (VOID*) malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
    
if ((dwRetVal = IcmpSendEcho(hIcmpFile, 
        inet_addr(
"209.131.36.158"), //用的雅虎的一個IP,可能延遲會大一點,用國內的會小一點
        SendData, 
sizeof(SendData), 
        NULL, ReplyBuffer, 
        
sizeof(ReplyBuffer) + sizeof(ICMP_ECHO_REPLY),
        
1000)) != 0) {
        b
=true;
    }
    free(ReplyBuffer);
    
return b;
}
很簡單的幾行代碼,沒有注釋;
如果網絡不通的話枚舉撥號連接,進行撥號:
bool RASManager::ConnectNetwork()
{
    RASENTRYNAME Entries[
15];   
    DWORD cb,cEntries,dwRet;   
    Entries[
0].dwSize=sizeof(RASENTRYNAME);   
    cb
=sizeof(Entries);   
    cEntries
=0;   
    
    dwRet
=::RasEnumEntries(NULL, NULL, &Entries[0], &cb, &cEntries);//如果函數成功,則返回0   
    
    
if(dwRet == 0)   
    {
        CHAR  szRasEntryName[RAS_MaxEntryName 
+ 1]={0};
        
for(UINT i=0;i<cEntries;i++)
            strcpy(szRasEntryName,Entries[i].szEntryName);
        RASDIALPARAMS rdParams;
        DWORD dwRet;
        hConn
=NULL;
        rdParams.dwSize
=sizeof(RASDIALPARAMS);
        strcpy(rdParams.szEntryName,szRasEntryName);
        strcpy(rdParams.szPhoneNumber,
"#777");//我用的3G卡,撥#777號碼
        strcpy(rdParams.szUserName,"用戶名");
        strcpy(rdParams.szPassword,
"密碼");
        strcpy(rdParams.szDomain,"");//這個也很重要,指定域,如果不指定這個的話下面注釋的兩句一定要加上,下邊兩句的意思是獲取最后一次連接成功時的參數信息,如果用下邊兩句的話連同這行和這行上面的三行都可以省略
       // BOOL fPass;
        //RasGetEntryDialParams(NULL, 
&rdParams,&fPass);
        dwRet
=RasDial(NULL,NULL,&rdParams,0L,NULL,&hConn);
        
if(dwRet!=0)
        {
            
return false;
        }
        
return true;
    }    
    
else    
    {    
        
return false;
    }
}
預先建立撥號連接,以上撥號代碼經過修改已經不需要保存密碼,只建立一個撥號連接即可。Windows XP or later:  Do not use the RasSetEntryDialParams function. MSDN上面的說法就是RasSetEntryDialParams 別在XP之后的系統上使用了。
檢查撥號連接的狀態,如果已經通過撥號連接上了網絡當然不用再進行撥號了,代碼如下:
bool RASManager::RasGetConnectStatus()
{
    LPRASCONN lpRasConn 
= NULL;    
    DWORD   cbBuf   
=   0;    
    DWORD   cConn   
=   0;    
    DWORD   dwRet   
=   0;    
    HRASCONN  hrasconn;
    
bool    bResult=FALSE;
    RASCONNSTATUS rasStatus;    
    UINT   ndx;
    cbBuf 
= sizeof(RASCONN);
    lpRasConn 
= (LPRASCONN)malloc((UINT)cbBuf);  
    
if (lpRasConn != NULL)
    {    
        lpRasConn
->dwSize = sizeof(RASCONN);    
        dwRet 
= RasEnumConnections(lpRasConn,&cbBuf,&cConn);  
        
for(ndx=0;ndx<cConn;ndx++)      
        {
            hrasconn 
= lpRasConn[ndx].hrasconn;            
            rasStatus.dwSize 
= sizeof(RASCONNSTATUS);
            dwRet 
= ::RasGetConnectStatus(hrasconn,&rasStatus);
            
if(dwRet)    
                bResult
=FALSE;    
            
else
            {    
                
if(rasStatus.rasconnstate == RASCS_Connected)    
                    bResult
=TRUE;    
                
else
                    bResult
=FALSE;    
            }
        }
    }
    
else
        bResult
=FALSE;
    free(lpRasConn);
    
return bResult;
}
以上判斷是如果檢查到有一個已經連接的撥號連接就返回了,應該不會有兩個或者以上的撥號連接同時連接,打開端口會失敗的。
還有一個是斷線:
void RASManager::HungUP()
{
    LPRASCONN lpRasConn
=NULL;
    DWORD   cbBuf 
= 0;
    DWORD   cConn 
= 0;
    DWORD   dwRet 
= 0;
    HRASCONN   hrasconn;
    RASCONNSTATUS rasStatus;
    UINT   ndx;
    
    cbBuf 
= sizeof(RASCONN);
    lpRasConn 
= (LPRASCONN)malloc((UINT)cbBuf);
    
if(lpRasConn != NULL)
    {
        lpRasConn
->dwSize = sizeof(RASCONN);    
        dwRet 
= RasEnumConnections(lpRasConn,&cbBuf,&cConn);  
        
        
for(ndx=0;ndx<cConn;ndx++)
        {
            hrasconn 
= lpRasConn[ndx].hrasconn;
            rasStatus.dwSize 
= sizeof(RASCONNSTATUS);
            dwRet 
= ::RasGetConnectStatus(hrasconn,&rasStatus);
            
if(!dwRet)
            {
                
if(rasStatus.rasconnstate == RASCS_Connected)
                    RasHangUp(hrasconn);
            }
        }
        free(lpRasConn);
    }
}
這個沒什么好說的,執行關閉撥號連接的操作。
用程序創建連接,經過修改,已經可以正常創建連接,代碼如下:
bool RASManager::CreateRASLink()
{
    LPRASENTRY lpRasEntry 
= NULL;
    DWORD cb 
= sizeof(RASENTRY);
    DWORD dwBufferSize 
= 0;
    DWORD dwRet 
= 0;
    
    
    
// 取得entry的大小,這句也不知道是不是必須的,因為sizeof(RASENTRY)和這里取到的dwBufferSize是一樣的,不過還是Get一下安全點
    RasGetEntryProperties(NULL,"", NULL, &dwBufferSize, NULL, NULL); 
    
if (dwBufferSize == 0)
        
return false;
    
    lpRasEntry 
= (LPRASENTRY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBufferSize);
    
if (lpRasEntry == NULL)
        
return false;
    
    ZeroMemory(lpRasEntry, 
sizeof(RASENTRY));
    lpRasEntry
->dwSize = dwBufferSize;
    lpRasEntry
->dwfOptions = RASEO_RemoteDefaultGateway|RASEO_PreviewPhoneNumber|RASEO_PreviewUserPw; // 這里的幾個選項挺重要的,RASEO_RemoteDefaultGateway這個選項把創建的連接設置為默認連接,RASEO_PreviewPhoneNumber對應選項中的提示輸入電話號碼,RASEO_PreviewUserPw對應選項中的提示用戶名和密碼
    lpRasEntry->dwType = RASET_Phone;
    
    lstrcpy(lpRasEntry
->szDeviceType, RASDT_Modem);
    lstrcpy(lpRasEntry
->szDeviceName,"www");
    lpRasEntry
->dwfNetProtocols = RASNP_Ip;
    lpRasEntry
->dwFramingProtocol = RASFP_Ppp;
    
    dwRet 
= RasSetEntryProperties(NULL, "www", lpRasEntry, dwBufferSize, NULL, 0); // 創建連接
//
The RasSetEntryProperties function changes the connection information for an entry in the phone book or creates a new phone-book entry.(reference MSDN)
    HeapFree(GetProcessHeap(), 0, (LPVOID)lpRasEntry);
    
    
if (dwRet != 0)
        
return false;
    
return true;
}
上面的代碼到是可以創建一個撥號連接,不過是個空的,里面沒用用戶名和密碼等信息,需要用上面的撥號代碼來指定撥號參數,不能使用RasGetEntryDialParams來獲取了。
上面的代碼基本上是在網絡上搜索所得,稍加修改,在這里整理一下。

再補充一下刪除連接的操作,代碼如下:
void RASManager::DeletePhoneBookEntry()
{
    RASENTRYNAME Entries[
15];   
    DWORD cb,cEntries,dwRet;
    Entries[
0].dwSize=sizeof(RASENTRYNAME);   
    cb
=sizeof(Entries);
    cEntries
=0;   
    
    dwRet
=::RasEnumEntries(NULL, NULL, &Entries[0], &cb, &cEntries);//如果函數成功,則返回0   
    
    
if(dwRet == 0)   
    {
        CHAR  szRasEntryName[RAS_MaxEntryName 
+ 1]={0};
        
for(UINT i=0;i<cEntries;i++)
        {
            strcpy(szRasEntryName,Entries[i].szEntryName);
            RasDeleteEntry(NULL,szRasEntryName);
        }
    }
}
要想實現自動啟動撥號網絡,就要使用Remote Access Service (RAS) API,這個API最早是在Windows for Workgroup 3.11中出現的,現在它已經成為Win32 API的一個組成部分。該API將整個撥號網絡稱為Phonebook,而每一個連接稱為PhonebookEntry。你可以使用RasCreatePhonebookEntry來創建新的連接,用RasDial來撥號,而RasEnumEntries可以獲得當前系統已有的所有連接,使用其它的RAS函數還可以獲取或設置連接的參數。 RasEditPhonebookEntry函數將激活標準的Windows 95/NT屬性對話框來修改連接的屬性。你可以從Win32 API的手冊找到所有相關函數的詳細介紹。

補充:在windows中一個撥號連接即為一個PhonrbookEntry以下稱為電話薄記錄或是連接。總的這些稱為Phonebook。
posted on 2013-03-17 20:10 聶文龍 閱讀(438) 評論(0)  編輯 收藏 引用 所屬分類: Visual C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩亚洲欧美精品| 久久亚洲综合色一区二区三区| 你懂的网址国产 欧美| 中文亚洲视频在线| 激情一区二区| 免费不卡视频| 一本色道久久综合亚洲二区三区 | 欧美成黄导航| 久久天堂国产精品| 久久久久免费观看| 久久精品亚洲国产奇米99| 西西人体一区二区| 欧美激情1区2区3区| 欧美sm视频| 欧美激情无毛| 亚洲精品久久视频| 亚洲黄色片网站| 亚洲精品四区| 99精品视频免费全部在线| 欧美大片在线观看一区| 亚洲国产一区二区三区在线播| 亚洲激情不卡| 欧美成人在线影院| 一区二区三区蜜桃网| 亚洲字幕在线观看| 久久久久一区| 欧美日韩成人一区二区三区| 国产精品爽黄69| 黄色成人免费网站| 一区二区三区中文在线观看 | 欧美视频在线观看一区| 国产精品日韩一区二区| 国产伊人精品| 亚洲区在线播放| 亚洲一二区在线| 国产伦精品一区二区三区高清| 国产精品久久久久7777婷婷| 激情五月婷婷综合| 国产欧美日韩麻豆91| 亚洲黄色av| 午夜精品久久久久久99热软件| 久久蜜桃资源一区二区老牛| 亚洲精品少妇| 久久经典综合| 欧美亚洲成人免费| 在线观看亚洲一区| 午夜国产精品视频| 亚洲国产日韩在线| 久久精品国产一区二区三区免费看| 欧美成人免费网| 国产亚洲综合性久久久影院| 宅男66日本亚洲欧美视频| 欧美.日韩.国产.一区.二区| 亚洲在线免费| 欧美日韩国产欧| 亚洲国产精品99久久久久久久久| 久久综合狠狠综合久久综青草 | 欧美日韩在线视频观看| 怡红院精品视频| 亚洲欧美一级二级三级| 亚洲国产乱码最新视频| 久久精品视频在线看| 国产精品欧美在线| 亚洲精品社区| 久久一区精品| 久久av红桃一区二区小说| 国产精品久久久久久久久久久久| 国外成人性视频| 午夜日韩在线观看| 一二三区精品福利视频| 欧美精品乱人伦久久久久久| 亚洲国产成人不卡| 蜜臀99久久精品久久久久久软件 | av成人天堂| 欧美精品在线免费| 99精品国产在热久久| 欧美电影免费观看高清完整版| 欧美一区二区三区在| 国产亚洲欧美日韩精品| 久久精品国产第一区二区三区最新章节| 一本不卡影院| 欧美色视频日本高清在线观看| 亚洲美女啪啪| 99视频一区二区| 国产精品毛片| 久久超碰97中文字幕| 欧美一级在线亚洲天堂| 国外视频精品毛片| 欧美91福利在线观看| 欧美 亚欧 日韩视频在线| 亚洲免费观看视频| 日韩午夜av电影| 国产精品qvod| 久久精品国产欧美激情| 久久精品免费| 亚洲精品一区二区三区樱花 | 午夜精品福利一区二区三区av | 国产日韩精品综合网站| 亚洲视频中文| 亚洲一区二区三区精品视频| 国产伦精品一区二区三区免费 | 欧美日韩四区| 欧美一区二区三区日韩| 亚洲欧美福利一区二区| 久久成人免费日本黄色| 亚洲人成网站影音先锋播放| 亚洲欧洲av一区二区| 亚洲日本中文字幕| 久久久久久九九九九| 欧美一区二区三区日韩| 欧美日韩在线精品一区二区三区| 麻豆精品一区二区综合av | 国内精品国语自产拍在线观看| 亚洲国产成人在线视频| 国产婷婷色综合av蜜臀av| 99视频热这里只有精品免费| 亚洲欧洲日本专区| 久久精品一区二区三区不卡牛牛| 亚洲一区中文| 欧美日韩一区二区三区在线看| 亚洲高清在线观看| 亚洲国产一二三| 久久一区精品| 免费国产自线拍一欧美视频| 国产自产v一区二区三区c| 午夜精品999| 午夜精品久久久久99热蜜桃导演| 欧美日韩激情小视频| 亚洲免费成人| 在线视频一区观看| 欧美日本成人| 亚洲精品日韩欧美| 亚洲午夜电影网| 国产精品第三页| 亚洲午夜成aⅴ人片| 翔田千里一区二区| 国产精品专区h在线观看| 午夜精品一区二区三区四区 | 国内一区二区在线视频观看| 午夜精品www| 久久久久久999| 国内自拍亚洲| 另类激情亚洲| 亚洲国产精品va在线看黑人动漫| 亚洲毛片视频| 国产精品第十页| 午夜精品亚洲| 欧美 亚欧 日韩视频在线| 亚洲人人精品| 欧美视频三区在线播放| 亚洲一区中文字幕在线观看| 久久国产精品99精品国产| 狠狠噜噜久久| 欧美大片在线看免费观看| 一区二区三区日韩欧美| 久久精品亚洲一区二区| 亚洲黄色有码视频| 国产精品久久精品日日| 久久久久久电影| 99天天综合性| 男人的天堂亚洲在线| 亚洲午夜精品久久久久久浪潮 | 一区二区在线视频| 欧美国产视频日韩| 一区二区三区毛片| 久久亚洲精品伦理| 欧美sm视频| 亚洲午夜精品一区二区| 国产精品视屏| 久久久午夜电影| 亚洲卡通欧美制服中文| 久久黄色网页| 一本一本久久a久久精品综合妖精| 国产精品成人一区二区三区夜夜夜| 欧美一二三区在线观看| 欧美激情视频在线播放| 午夜亚洲福利| 亚洲人成网在线播放| 国产区日韩欧美| 欧美国产日韩xxxxx| 香蕉成人伊视频在线观看| 亚洲国产婷婷香蕉久久久久久99| 香蕉尹人综合在线观看| 日韩午夜精品| 在线精品国产成人综合| 国产九色精品成人porny| 欧美国产欧美亚洲国产日韩mv天天看完整 | 午夜一区不卡| 99视频精品免费观看| 欧美刺激性大交免费视频| 香蕉久久一区二区不卡无毒影院| 亚洲精品永久免费| 精品51国产黑色丝袜高跟鞋| 国产精品日韩久久久| 欧美日韩色综合| 欧美高清日韩| 欧美 日韩 国产一区二区在线视频 | 亚洲欧美成人网| 99国产精品久久久| 亚洲日本成人女熟在线观看|