如何更改手机网络连接为指定的连接
小弟创建了一个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时,程序会自动连接到相应的接入点,然后在程序其它位置访问网络时,程序选择的是系统设置里的连接方式,为什么连接方式还是没有改变呢? --------------------编程问答--------------------
连接方式说的是 “连接设置”--》“选择网络” 吧?
准确的讲,应该是选择路由的路径,你上面的代码只是会进行拨号,不会改变本地路由表
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;
} --------------------编程问答--------------------
小弟也有这个问题
这个是拨号吧,系统的网络连接方式没有发生变化
如果在程序里面用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;
。。。
这位大哥,这种拨号可以拨到相应的连接,但可以让程序所有的联网方式都用这种吗?这个方法过后,在程序其他位置联网的时候,程序还是会用系统连接里面的默认连接方式联网。
这种拨号改变不了系统默认的连接方式啊,结果就杯具了。感觉这种拨号根本就没用。
请问是不是有什么地方还要再改一下?
先谢了啊! --------------------编程问答-------------------- 呃 有没有C#的啊 --------------------编程问答--------------------
如何让程序选择VPN专网啊?
补充:移动开发 , Windows Phone