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

隨筆 - 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视频一区二区三区| 亚洲欧美国产精品va在线观看 | 久久99在线观看| 小黄鸭精品aⅴ导航网站入口| 99xxxx成人网| 亚洲精品一区二区在线观看| 欧美激情二区三区| 欧美一区二区三区免费看| 亚洲视频一区二区在线观看| 日韩天天综合| 亚洲免费av电影| 亚洲精品男同| 在线视频欧美日韩| 亚洲视频第一页| 亚洲一区二区三区在线观看视频| 中文日韩欧美| 亚洲欧美一区二区精品久久久| 亚洲丰满在线| 亚洲另类黄色| 亚洲在线成人精品| 久久精品一区二区三区四区 | 亚洲系列中文字幕| 午夜精品久久久久| 久久激情五月激情| 黄色成人在线| 亚洲国产一区二区三区在线播 | 免费在线成人av| 亚洲国产欧美日韩另类综合| 欧美成熟视频| 久久精品理论片| 老司机一区二区三区| 99re热精品| 欧美一区二区三区婷婷月色 | 久久精品首页| 欧美国产精品劲爆| 国产精品一区久久久| 亚洲精品偷拍| 欧美尤物一区| 亚洲国产一区二区a毛片| 国产精品99久久久久久人| 欧美一区二区三区四区在线观看地址| 欧美激情女人20p| 一本一本a久久| 久久久久久噜噜噜久久久精品| 欧美国产日本韩| 国产精品自在在线| 最新日韩在线视频| 久久精品国产99国产精品澳门| 亚洲第一伊人| 亚洲精品黄色| 久久成人精品无人区| 欧美精品v日韩精品v韩国精品v| 国产精品美女久久久| 最新日韩av| 久久久亚洲综合| 亚洲手机视频| 欧美sm视频| 国内精品久久久久久影视8| 亚洲天堂免费观看| 美女视频黄 久久| 亚洲欧洲日韩女同| 久久久精品tv| 国语自产在线不卡| 欧美与欧洲交xxxx免费观看| 亚洲久久一区二区| 美女网站在线免费欧美精品| 国产亚洲毛片在线| 亚洲欧美日韩国产精品| 亚洲精品国产精品国自产在线| 久热这里只精品99re8久| 国产日韩三区| 欧美一区久久| 亚洲国产成人av在线| 久久婷婷人人澡人人喊人人爽 | 久久精品一本久久99精品| 国产精品视频免费一区| 亚洲一二三区在线观看| 亚洲精品免费网站| 欧美激情导航| 女人天堂亚洲aⅴ在线观看| 裸体一区二区三区| 在线日韩av永久免费观看| 久久国产精品一区二区三区四区 | 一区二区三区三区在线| 亚洲乱码国产乱码精品精可以看 | 亚洲精品中文字| 欧美精品综合| 亚洲一级二级在线| 亚洲欧美激情视频| 国产毛片精品国产一区二区三区| 亚洲欧美日本日韩| 午夜精品成人在线视频| 国产日韩欧美一区二区三区在线观看| 欧美专区第一页| 久久久av毛片精品| 亚洲精品久久久久久下一站| 99精品视频一区| 欧美日韩在线三区| 亚洲精品国偷自产在线99热| 亚洲人成在线免费观看| 国产精品亚洲产品| 另类av导航| 欧美日韩国产一级片| 亚洲伊人一本大道中文字幕| 亚洲欧美国产精品va在线观看| 国产精品视区| 美女网站在线免费欧美精品| 牛夜精品久久久久久久99黑人| 亚洲六月丁香色婷婷综合久久| 9人人澡人人爽人人精品| 国产精品一区二区三区观看 | 欧美日韩一区二区三区在线观看免 | 欧美国产亚洲精品久久久8v| 欧美日韩国产首页| 久久久久久久久久久成人| 免费一级欧美片在线观看| 亚洲专区欧美专区| 久久久国产视频91| 亚洲欧美日韩高清| 欧美激情91| 正在播放欧美视频| 久久久精品久久久久| 亚洲一区国产一区| 美女在线一区二区| 欧美亚洲综合网| 欧美韩日高清| 久久欧美肥婆一二区| 欧美系列精品| 久久高清一区| 国产精品乱码久久久久久| 亚洲第一综合天堂另类专| 国产精品美女久久久浪潮软件| 国产精品成人午夜| 999亚洲国产精| 久久亚洲欧美国产精品乐播| 久久国产精品久久国产精品 | 中日韩高清电影网| 亚洲欧美日韩另类| 国产精品对白刺激久久久| 一区二区三区国产精品| 亚洲在线中文字幕| 国产亚洲欧洲一区高清在线观看| 亚洲欧美国产精品桃花| 久久精品30| 狠狠色综合播放一区二区 | 国产精品久久久久三级| 亚洲男女毛片无遮挡| 久久国产免费| 一色屋精品视频在线看| 模特精品在线| 亚洲伦理中文字幕| 性18欧美另类| 国内精品一区二区三区| 久久亚洲影院| 亚洲精品一区二| 亚洲欧美国产制服动漫| 国产亚洲精品bt天堂精选| 久久久久久日产精品| 国产综合精品| 久久夜色精品国产欧美乱| 欧美韩国一区| 亚洲欧美另类久久久精品2019| 国产一区二区三区不卡在线观看 | 亚洲欧美视频在线| 国产亚洲在线| 欧美国产在线电影| 亚洲午夜激情网页| 免费在线观看精品| 亚洲小少妇裸体bbw| 狠狠色狠色综合曰曰| 欧美日韩a区| 欧美一区在线视频| 亚洲精品永久免费| 久久免费99精品久久久久久| 99视频在线精品国自产拍免费观看 | 久久午夜精品一区二区| 亚洲人成在线播放| 久久人人爽爽爽人久久久| 亚洲人成人77777线观看| 国产精品美女久久久浪潮软件| 久色成人在线| 午夜精品一区二区三区四区 | 亚洲大胆人体视频| 国产精品久在线观看| 免费在线看成人av| 欧美专区中文字幕| 一本一本久久| 亚洲激情偷拍| 亚洲无线视频| 亚洲成人自拍视频| 亚洲成人在线网站| 国产精品一区久久久久| 亚洲国产精品久久久久| 欧美激情精品久久久久久免费印度| 一区在线视频观看| 久久这里有精品视频| 夜夜精品视频| 欧美激情视频一区二区三区在线播放 | 亚洲国产成人av|