• WinCE 下 RAS 拨号连接的建立和拨号过程


    在 CE 下如果系统没有建立拨号网络,要实现上网功能时,就需要通过代码来实现建立拨号网络、拨号实现上网的过程。

    以下代码中的参数和拨号所用数值,都是电信 EVDO 的配置。如果换 GSM 或 WCDMA 时,请相应修改。

      1 HRASCONN ghRasConn = NULL;  
      2 /* 
      3  * 设置串口波特率和数据位等 
      4 */  
      5 BOOL CTCPClientDlg::SetDevCfg(TCHAR *ptcRasEntryName)  
      6 {  
      7     HKEY hk;  
      8     unsigned char cDevCfg[684];  
      9     TCHAR tcRegAddr[512 + 1];  
     10     DWORD *pdwEapConnData = NULL;  
     11   
     12     ZeroMemory(tcRegAddr,sizeof(TCHAR) * (512 + 1));  
     13     ZeroMemory(cDevCfg,sizeof(char) * 683);  
     14     cDevCfg[0] = 0x30;  
     15     cDevCfg[4] = 0x05;  
     16     cDevCfg[9] = 0x01;  
     17     cDevCfg[13] = 0xC2;     // 波特率  
     18     cDevCfg[14] = 0x01;  
     19     cDevCfg[18] = 0x08;     // 数据位  
     20   
     21     wsprintf(tcRegAddr,L"Comm\RasBook\%s",ptcRasEntryName);  
     22   
     23     if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER,tcRegAddr,0,0,&hk))  
     24     {  
     25         RegSetValueEx(hk,L"DevCfg",0,REG_BINARY,(LPBYTE)cDevCfg,sizeof(cDevCfg));  
     26         RegSetValueEx(hk,L"EapConnData",0,REG_BINARY,(LPBYTE)pdwEapConnData,0);  
     27         RegFlushKey(HKEY_CURRENT_USER);  
     28   
     29         RegCloseKey(hk);  
     30   
     31         return TRUE;  
     32     }  
     33     return FALSE;  
     34 }  
     35   
     36 BOOL CTCPClientDlg::CreateRASLink(TCHAR *ptcRasEntryName,TCHAR *ptcModemName)  
     37 {  
     38     LPRASENTRY lpRasEntry = NULL;  
     39     DWORD dwRasEntrySize = sizeof(RASENTRY);  
     40     DWORD dwBufferSize = 0;  
     41     DWORD dwRet = 0;  
     42     BOOL bRet = TRUE;  
     43   
     44     if(NULL == ptcRasEntryName || NULL == ptcModemName)  
     45         return FALSE;  
     46   
     47     RasGetEntryProperties(NULL,L"",NULL,&dwBufferSize,NULL,NULL);   
     48     if(0 == dwBufferSize)  
     49         return FALSE;  
     50   
     51     lpRasEntry = (LPRASENTRY)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwBufferSize);  
     52     if(NULL == lpRasEntry)  
     53         return FALSE;  
     54   
     55     ZeroMemory(lpRasEntry,sizeof(RASENTRY));  
     56     lpRasEntry->dwSize = dwBufferSize;  
     57     lpRasEntry->dwfOptions = RASEO_RemoteDefaultGateway;     // RASEO_PreviewUserPw 弹出用户名和密码输入框  
     58     // Leo lpRasEntry->dwType = RASET_Phone;  
     59     // lpRasEntry->dwCountryID = 86; // This member is currently ignored by Windows CE.  
     60     lpRasEntry->dwCountryCode = 86;  
     61     lstrcpy(lpRasEntry->szAreaCode,L"10");  
     62     lstrcpy(lpRasEntry->szLocalPhoneNumber,L"#777");  
     63   
     64     lstrcpy(lpRasEntry->szDeviceType,RASDT_Modem);  
     65     lstrcpy(lpRasEntry->szDeviceName,ptcModemName);      // 选用 Modem 的名字  
     66     lpRasEntry->dwfNetProtocols = RASNP_Ip;  
     67     lpRasEntry->dwFramingProtocol = RASFP_Ppp;  
     68   
     69     dwRet = RasSetEntryProperties(NULL,ptcRasEntryName,lpRasEntry,dwBufferSize,NULL,0);  //  创建连接   
     70     if(0 != dwRet)  
     71     {  
     72         bRet = FALSE;  
     73     }  
     74     HeapFree(GetProcessHeap(),0,(LPVOID)lpRasEntry);  
     75   
     76     return bRet;  
     77 }  
     78   
     79 BOOL CTCPClientDlg::NetworkDialAndParams(TCHAR *ptcRasEntryName)  
     80 {  
     81     DWORD dwRet = 0;  
     82     UINT i = 0;  
     83     RASDIALPARAMS rdParams;  
     84   
     85     ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));    
     86   
     87     rdParams.dwSize = sizeof(RASDIALPARAMS);  
     88     wcscpy(rdParams.szEntryName,ptcRasEntryName);  
     89     // wcscpy(rdParams.szPhoneNumber,L"#777");  
     90     wcscpy(rdParams.szUserName,L"card");  
     91     wcscpy(rdParams.szPassword,L"card");  
     92   
     93     ghRasConn = NULL;  
     94     dwRet = RasDial(NULL,NULL,&rdParams,0xFFFFFFFF,NULL,&ghRasConn);  
     95     if(0 != dwRet)  
     96     {  
     97         RETAILMSG(1,(L"RasDial Error: %d.
    ",dwRet));  
     98         return FALSE;  
     99     }  
    100     return TRUE;  
    101 }  

    调用示例:

      1 void CNetworkDialDlg::OnBtnClickedOpenNet()  
      2 {  
      3     GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);  
      4     m_NetName.EnableWindow(FALSE);  
      5   
      6     // TODO: Add your control notification handler code here  
      7     if(CreateRASLink(RASDIAL_NET_NAME,RASDIAL_NET_MODEM_NAME))  
      8     {  
      9         if(SetDevCfg(RASDIAL_NET_NAME))  
     10         {  
     11             if(NetworkDialAndParams(RASDIAL_NET_NAME,ghMainWnd))  
     12             {  
     13                 RETAILMSG(1,(L"[TCP Client]Dial new work success.
    "));  
     14                   
     15                 SetTimer(RASDIAL_NETSHOW_TIMER_ID,RASDIAL_NETSHOW_TIME_OUT,NULL);  
     16             }  
     17             else  
     18             {  
     19                 RETAILMSG(1,(L"[TCP Client]Dial new work failed!
    "));  
     20             }  
     21         }  
     22         else  
     23         {  
     24             RETAILMSG(1,(L"[TCP Client]Set RAS device config failed!
    "));  
     25         }  
     26     }  
     27     else  
     28     {  
     29         RETAILMSG(1,(L"[TCP Client]Create RAS link failed!
    "));  
     30     }  
     31 }  
     32   
     33 BOOL CNetworkDialDlg::PreTranslateMessage(MSG* pMsg)  
     34 {  
     35     switch(pMsg->message)  
     36     {  
     37     case WM_RASDIALEVENT:  
     38         OnRasDialEvent(pMsg->wParam,pMsg->lParam);  
     39         break;  
     40     case WM_USER + 0x1000:  
     41         if(1 == pMsg->wParam)  
     42         {  
     43             GetDlgItem(IDC_STATIC_PING_STATUS)->SetWindowText(L"PING 状态: 成功");  
     44         }  
     45         else  
     46         {  
     47             GetDlgItem(IDC_STATIC_PING_STATUS)->SetWindowText(L"PING 状态: 失败");  
     48         }  
     49         break;  
     50     default:  
     51         break;  
     52     }  
     53   
     54     return CDialog::PreTranslateMessage(pMsg);  
     55 }  
     56   
     57   
     58 /* 
     59 [TCP Ras Event]1.RasState: Open port 
     60 [TCP Ras Event]2.RasState: Port opened 
     61 [TCP Ras Event]3.RasState: Device Connected 
     62 [TCP Ras Event]4.RasState: All Device Connected 
     63 [TCP Ras Event]5.Authenticating 
     64 [TCP Ras Event]9.RAS Other RasState:12 
     65 [TCP Ras Event]6.Authenticated, continue login... 
     66 [TCP Ras Event]7.RASCS_Connected received 
     67 */  
     68 LRESULT CNetworkDialDlg::OnRasDialEvent(WPARAM wParam,LPARAM lParam)  
     69 {  
     70     RASCONNSTATE RasState = (RASCONNSTATE)wParam;  
     71     DWORD dwError = (DWORD)lParam;  
     72   
     73     gRasState = RasState;  
     74     switch(RasState)  
     75     {  
     76     case RASCS_OpenPort:  
     77         RETAILMSG(1,(L"[TCP Ras Event]1.RasState: Open port
    "));  
     78         break;  
     79   
     80     case RASCS_PortOpened:  // 端口已经打开  
     81         RETAILMSG(1,(L"[TCP Ras Event]2.RasState: Port opened
    "));  
     82         break;  
     83   
     84     case RASCS_DeviceConnected: // 正在连接  
     85         {  
     86             // dialDeviceConnected = TRUE;  
     87             RETAILMSG(1,(L"[TCP Ras Event]3.RasState: Device Connected
    "));  
     88         }  
     89         break;  
     90   
     91     case RASCS_AllDevicesConnected: //  
     92         // dialDeviceConnected = TRUE;  
     93         RETAILMSG(1,(L"[TCP Ras Event]4.RasState: All Device Connected
    "));  
     94         break;  
     95   
     96     case RASCS_Authenticate:  
     97         {  
     98             // dialDeviceConnected = TRUE;  
     99             RETAILMSG(1,(L"[TCP Ras Event]5.Authenticating
    "));  
    100         }  
    101         break;  
    102   
    103     case RASCS_Authenticated:  
    104         {                 
    105             // dialDeviceConnected = TRUE;  
    106             RETAILMSG(1,(L"[TCP Ras Event]6.Authenticated, continue login...
    "));  
    107         }  
    108         break;  
    109   
    110     case RASCS_AuthNotify:  
    111         {  
    112             RETAILMSG(1,(L"[TCP Ras Event]RASCS_AuthNofify received,Error: %d
    ",dwError));  
    113             switch(dwError)  
    114             {  
    115             case ERROR_RESTRICTED_LOGON_HOURS:  
    116             case ERROR_ACCT_DISABLED:  
    117             case ERROR_PASSWD_EXPIRED:  
    118             case ERROR_NO_DIALIN_PERMISSION:  
    119             case ERROR_CHANGING_PASSWORD:  
    120             default:  
    121                 break;  
    122             }  
    123         }  
    124         break;  
    125   
    126     case RASCS_Connected:  
    127         {  
    128             RETAILMSG(1,(L"[TCP Ras Event]7.RASCS_Connected received
    "));  
    129             gbNetConnected = TRUE;  
    130         }  
    131         break;  
    132   
    133     case RASCS_Disconnected:  
    134         {  
    135             CString csError;  
    136             RETAILMSG(1,(L"[TCP Ras Event]8.RASCS_Disconnected received. Error: %d
    ",dwError));  
    137               
    138             csError.Format(L"建立网络出现错误:%d",dwError);  
    139             GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);  
    140             m_NetName.EnableWindow(TRUE);  
    141             giRasDialTimerCount = 0;  
    142             GetDlgItem(IDC_STATIC_STATUS)->SetWindowText(csError);  
    143             KillTimer(RASDIAL_NETSHOW_TIMER_ID);  
    144         }  
    145         break;  
    146   
    147     default:  
    148         RETAILMSG(1,(L"[TCP Ras Event]9.RAS Other RasState:%d
    ", RasState));  
    149         break;  
    150     }  
    151   
    152     return TRUE;  
    153 }  
  • 相关阅读:
    51nod1370 排列与操作
    2019-11-20-Github-给仓库上传-NuGet-库
    2019-11-20-Github-给仓库上传-NuGet-库
    2019-6-5-WPF-隐藏系统窗口菜单
    2019-6-5-WPF-隐藏系统窗口菜单
    2019-8-31-AutoHotKey-用打码的快捷键
    2019-8-31-AutoHotKey-用打码的快捷键
    2019-4-10-win10-uwp-自定义标记扩展
    2019-4-10-win10-uwp-自定义标记扩展
    2018-9-3-C#-const-和-readonly-有什么区别
  • 原文地址:https://www.cnblogs.com/91program/p/5206231.html
Copyright © 2020-2023  润新知