在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > GPRS開(kāi)發(fā)系列文章之進(jìn)階篇

            GPRS開(kāi)發(fā)系列文章之進(jìn)階篇

            作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

            HRESULT WINAPI ConnMgrReleaseConnection( HANDLE hConnection,BOOL bCache );

            【連接管理API大致使用步驟】:

            首先我們利用ConnMgrApiReadyEvent()函數(shù)來(lái)確認(rèn)是否有可用連接,如果有可用連接我們則利用ConnMgrEnumDestinations()函數(shù)枚舉所有可用連接,然后遍歷所有連接調(diào)用我們的同步或異步連接方法ConnMgrEstablishConnectionSync()與ConnMgrEstablishConnection()來(lái)發(fā)起連接,一旦連接成功后我們就可以進(jìn)行我們偉大的下一步了,就是和我們的服務(wù)器進(jìn)行通信。

            【GPRS demo效果圖】

            【GPRSDemo介紹】

            GPRSDemo主要利用了上述的幾個(gè)重要的API函數(shù)來(lái)獲取當(dāng)前可用連接,并自動(dòng)選擇一個(gè)最佳的連接途徑,然后啟用這個(gè)連接,在連接啟動(dòng)成功以后再用socket 進(jìn)行網(wǎng)絡(luò)連接,與公網(wǎng)服務(wù)器進(jìn)行通信。

            首先檢查是否有可用連接

            BOOL CConnectManager::GetConnMgrAvailable()

            {

            HANDLE hConnMgr = ConnMgrApiReadyEvent ();

            BOOL bAvailbale = FALSE;

            DWORD dwResult = ::WaitForSingleObject ( hConnMgr, 2000 );

            if ( dwResult == WAIT_OBJECT_0 )

            {

            bAvailbale = TRUE;

            }

            // 關(guān)閉

            if ( hConnMgr ) CloseHandle ( hConnMgr );

            return bAvailbale;

            }

            然后枚舉所有可用連接:

            void CConnectManager::EnumNetIdentifier ( OUT CStringArray StrAry )

            {

            CONNMGR_DESTINATION_INFO networkDestInfo = {0};

            // 得到網(wǎng)絡(luò)列表

            for ( DWORD dwEnumIndex=0; ; dwEnumIndex++ )

            {

            memset ( networkDestInfo, 0, sizeof(CONNMGR_DESTINATION_INFO) );

            if ( ConnMgrEnumDestinations ( dwEnumIndex, networkDestInfo ) == E_FAIL )

            {

            break;

            }

            StrAry.Add ( networkDestInfo.szDescription );

            }

            }

            接下來(lái)找到“Internet”這個(gè)連接,可用遠(yuǎn)程URL映射的方式來(lái)完成,這樣可以讓系統(tǒng)自動(dòng)選取一個(gè)最好的連接。

            int CConnectManager::MapURLAndGUID ( LPCTSTR lpszURL, OUT GUID guidNetworkObject, OUT CString *pcsDesc/*=NULL*/ )

            {

            if ( !lpszURL || lstrlen(lpszURL) 1 )

            return FALSE;

            memset ( guidNetworkObject, 0, sizeof(GUID) );

            int nIndex = 0;

            HRESULT hResult = ConnMgrMapURL ( lpszURL, guidNetworkObject, (DWORD*)nIndex );

            if ( FAILED(hResult) )

            {

            nIndex = -1;

            DWORD dwLastError = GetLastError ();

            AfxMessageBox ( _T(Could not map a request to a network identifier) );

            }

            else

            {

            if ( pcsDesc )

            {

            CONNMGR_DESTINATION_INFO DestInfo = {0};

            if ( SUCCEEDED(ConnMgrEnumDestinations(nIndex, DestInfo)) )

            {

            *pcsDesc = DestInfo.szDescription;

            }

            }

            }

            return nIndex;

            }

            最后啟用指定編號(hào)的連接并檢查連接狀態(tài)

            BOOL CConnectManager::EstablishConnection ( DWORD dwIndex )

            {

            // 釋放之前的連接

            ReleaseConnection ();

            // 得到正確的連接信息

            CONNMGR_DESTINATION_INFO DestInfo = {0};

            HRESULT hResult = ConnMgrEnumDestinations(dwIndex, DestInfo);

            BOOL bRet = FALSE;

            if(SUCCEEDED(hResult))

            {

            // 初始化連接結(jié)構(gòu)

            CONNMGR_CONNECTIONINFO ConnInfo;

            ZeroMemory(ConnInfo, sizeof(ConnInfo));

            ConnInfo.cbSize = sizeof(ConnInfo);

            ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;

            ConnInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;

            ConnInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;

            ConnInfo.guidDestNet = DestInfo.guid;

            ConnInfo.bExclusive = FALSE;

            ConnInfo.bDisabled = FALSE;

            DWORD dwStatus = 0;

            hResult = ConnMgrEstablishConnectionSync(ConnInfo, m_hConnection, 10*1000, dwStatus );

            if(FAILED(hResult))

            {

            m_hConnection = NULL;

            }

            else bRet = TRUE;

            }

            return bRet;

            }

            檢測(cè)連接狀態(tài)

            BOOL CConnectManager::WaitForConnected ( int nTimeoutSec, DWORD *pdwStatus/*=NULL*/ )

            {

            DWORD dwStartTime = GetTickCount ();

            BOOL bRet = FALSE;

            while ( GetTickCount ()-dwStartTime (DWORD)nTimeoutSec * 1000 )

            {

            if ( m_hConnection )

            {

            DWORD dwStatus = 0;

            HRESULT hr = ConnMgrConnectionStatus ( m_hConnection, dwStatus );

            if ( pdwStatus ) *pdwStatus = dwStatus;

            if ( SUCCEEDED(hr) )

            {

            if ( dwStatus == CONNMGR_STATUS_CONNECTED )

            {

            bRet = TRUE;

            break;

            }

            }

            }

            Sleep ( 100 );

            }

            return bRet;

            }

            最后要記得釋放連接

            void CConnectManager::ReleaseConnection ()

            {

            if ( m_hConnection )

            {

            ConnMgrReleaseConnection(m_hConnection, FALSE);

            m_hConnection = NULL;

            }

            }

            2. 客戶端與服務(wù)器端進(jìn)行socket通信APIsocket通信相關(guān)開(kāi)發(fā)API在Winsock2.h.文件中定義,因?yàn)镾OCKET通信不是本文的重點(diǎn)但是又是必須要涉及的



            關(guān)鍵詞:

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉