当前位置:编程学习 > wap >>

如何更改手机网络连接为指定的连接

    小弟创建了一个VPN专网,然后在程序中连接,发现程序寻找的是
    手机设置里面的连接方式,手动将连接方式改到VPN专网后可以正常使用。
   小弟想自动连接到指定的VPN专网,不需用户再去设置连接。
小弟用到的方法:
// 得到正确的连接信息            
            int hResult = ConnMgrEnumDestinations((int)nIndex, ref DestInfo);

            if (hResult >= 0)
            {
                // 初始化连接结构
                ConnInfo.cbSize = (uint)Marshal.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 = 0;
                ConnInfo.bDisabled = 0;

                uint dwStatus = CONNMGR_STATUS_CONNECTED;
                hResult = ConnMgrEstablishConnectionSync(ref ConnInfo, ref m_hConnection, 10 * 1000, ref dwStatus);
单步跟踪时,运行到ConnMgrEstablishConnectionSync时,程序会自动连接到相应的接入点,然后在程序其它位置访问网络时,程序选择的是系统设置里的连接方式,为什么连接方式还是没有改变呢? --------------------编程问答--------------------
引用楼主 sasasd 的回复:
然后在程序其它位置访问网络时,程序选择的是系统设置里的连接方式


连接方式说的是 “连接设置”--》“选择网络” 吧?
准确的讲,应该是选择路由的路径,你上面的代码只是会进行拨号,不会改变本地路由表
GetBestRoute
GetIpAddrTable
SetIpForwardEntry
等,这几个IP Helper的API是操作路由表相关的,往这个方向调查吧 --------------------编程问答--------------------
引用 1 楼 luver 的回复:
引用楼主 sasasd 的回复:
然后在程序其它位置访问网络时,程序选择的是系统设置里的连接方式


连接方式说的是 “连接设置”--》“选择网络” 吧?
准确的讲,应该是选择路由的路径,你上面的代码只是会进行拨号,不会改变本地路由表
GetBestRoute
GetIpAddrTable
SetIpForwardEntry
等,这几个IP Helper的API是操作路由表相关的……


这几个都好像是PC上的方法啊!可以在Mobile上面用吗?
能再具体一点吗?谢谢了! --------------------编程问答-------------------- 你在设置-》连接-》连接-》添加调制解调器-》电话(GPRS)-》电话号码:38356-》用户名:gf13;域:ABS_COPT-》完成
在高级中,添加一个URL,这个URL是你的默认网址-》完成 --------------------编程问答-------------------- 我最近也做了个与你类似的拨号功能,我是这样拨号的,代码贴给你
/// <summary>
        /// 拨号
        /// </summary>
        /// <returns></returns>
        public static bool DialUp(string Destination)
        {
            List<ConnectionManager.CONNMGR_DESTINATION_INFO> lst = ConnMgr.EnumConnDestinations();

            int nIndex = 0;
            //选择连接
            for (; nIndex < lst.Count; nIndex++)
            {
                if (string.Compare(lst[nIndex].Description, Destination, true) == 0)
                {
                    break;
                }
            }

            //建立连接
            if (nIndex >= 0 && nIndex < lst.Count)
            {
                return ConnMgr.EstablishConnection((uint)nIndex);
            }
            return false;
        } --------------------编程问答--------------------
引用 4 楼 alldimway 的回复:
我最近也做了个与你类似的拨号功能,我是这样拨号的,代码贴给你
/// <summary>
  /// 拨号
  /// </summary>
  /// <returns></returns>
  public static bool DialUp(string Destination)
  {
  List<ConnectionManager.CONNMGR_DESTINATION……

小弟也有这个问题
这个是拨号吧,系统的网络连接方式没有发生变化
如果在程序里面用webservice访问网络时,用的是默认的网络连接,所以还是不行
你的拨号起什么作用啊? --------------------编程问答-------------------- 又看了一遍你的问题,似乎是我理解错了。。。
你要的只是想在程序中自动拨通你建立的VPN连接,而不是GPRS连接,对吧?
这个比较好办:


。。。
//枚举存在的连接方式 
LPBYTE pBuffer = NULL;
DWORD dwSize;
int hr = ConnMgrQueryDetailedStatus(NULL, &dwSize);
if(STRSAFE_E_INSUFFICIENT_BUFFER != hr)
{
goto errorOut;
}

pBuffer = new BYTE[dwSize];
if(NULL == pBuffer)
{
goto errorOut;
}

hr = ConnMgrQueryDetailedStatus((CONNMGR_CONNECTION_DETAILED_STATUS*)pBuffer, &dwSize);
if(S_OK == hr)
{
CONNMGR_CONNECTION_DETAILED_STATUS* cmStatus = (CONNMGR_CONNECTION_DETAILED_STATUS*)pBuffer;
while(NULL != cmStatus)
{
if(cmStatus->dwConnectionStatus != CONNMGR_STATUS_CONNECTED)  //只找未拨通的连接
{
if(cmStatus->dwType == CM_CONNTYPE_VPN)  //找到了VPN接入点
{
//拨之
CONNMGR_CONNECTIONINFO ConnInfo={0};
ConnInfo.cbSize =sizeof(ConnInfo);
ConnInfo.dwParams =CONNMGR_PARAM_GUIDDESTNET;
ConnInfo.dwPriority =CONNMGR_PRIORITY_USERINTERACTIVE ;
ConnInfo.bExclusive = TRUE; //独占模式,比较好释放
ConnInfo.guidDestNet= cmStatus->guidDestNet;

hr = ConnMgrEstablishConnectionSync(&ConnInfo, &CConnectMgr::m_ConnHandle, 
TIMEOUT_DIAL, &m_dwStatus);
if(S_OK == hr)
{
hr = ConnMgrConnectionStatus(CConnectMgr::m_ConnHandle, &m_dwStatus);
if(hr == S_OK && m_dwStatus == CONNMGR_STATUS_CONNECTED)
{
bRet = TRUE;
break;
}
}

goto errorOut;
}
}

cmStatus = cmStatus->pNext;
}
}

errorOut:
if(pBuffer) delete[] pBuffer;
。。。
--------------------编程问答--------------------
引用 6 楼 luver 的回复:
又看了一遍你的问题,似乎是我理解错了。。。
你要的只是想在程序中自动拨通你建立的VPN连接,而不是GPRS连接,对吧?
这个比较好办:


C/C++ code

。。。
    //枚举存在的连接方式 
    LPBYTE pBuffer = NULL;
    DWORD dwSize;
    int hr = ConnMgrQueryDetailedStatus(N……


这位大哥,这种拨号可以拨到相应的连接,但可以让程序所有的联网方式都用这种吗?这个方法过后,在程序其他位置联网的时候,程序还是会用系统连接里面的默认连接方式联网。
这种拨号改变不了系统默认的连接方式啊,结果就杯具了。感觉这种拨号根本就没用。
请问是不是有什么地方还要再改一下?
先谢了啊! --------------------编程问答-------------------- 呃 有没有C#的啊 --------------------编程问答--------------------
如何让程序选择VPN专网啊?
补充:移动开发 ,  Windows Phone
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,