如何从指定的GPRS连接点来连接网络?

2021‘someday 2008-01-16 03:47:17
我手机现在设置有多个GPSR连接点,比如CMWAP有WAP1,WAP2,CMNET有GPRS1,GPRS2,GPRS3,现在我想指定用GPRS2这个连接来连接GPRS,要怎么设置啊,现在我已经能得到这五个的GUID和对应的名称了即WAP1,WAP2,GPRS1,GPRS2,GPRS3,要程序从指定的GPRS连接点连接到网络,要怎么做?
附部分代码:


//列出所有的连接点的信息

struct ConInfo
{ WCHAR ConName[50];
GUID Aguid;
};
ConInfo AConInfo[10];

INT SelGPRS()
{

//Connection manager on Windows Mobile which exposes an api ConnMgrQueryDetailedStatus.This api can be used to query all the avaialble connections on the device. Following code snippet shows how:

//Variable Declaration
CONNMGR_CONNECTION_DETAILED_STATUS *pConnMgrDet = NULL;
HRESULT hResult;
DWORD dwBufferSize=0;
//Code Snippet
hResult=ConnMgrQueryDetailedStatus(pConnMgrDet,&dwBufferSize);

//This call the ConnMgrQueryDetailedStatus would return required buffer size in the dwBufferSizeParamater.

if(hResult==(HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)))
{
pConnMgrDet=(CONNMGR_CONNECTION_DETAILED_STATUS *)malloc(dwBufferSize);
hResult=ConnMgrQueryDetailedStatus(pConnMgrDet,&dwBufferSize);
}

//This would return a buffer hacing all the available connection informations.You can step through each using the pNext memeber of the structure.

int i = 0;

while(pConnMgrDet)
{
//Do what you want eg. if you want to check cellular network

if(pConnMgrDet->dwType==CM_CONNTYPE_CELLULAR)
{
wcscpy(AConInfo[i].ConName,pConnMgrDet->szDescription);
AConInfo[i].Aguid = pConnMgrDet->guidDestNet;

i++;
//Do some thing
}
pConnMgrDet=pConnMgrDet->pNext;
}

return i;
}

//GPRS连接
BOOL InitGPRS()
{
HANDLE hConnection;
DWORD dwStatus;
CONNMGR_CONNECTIONINFO sConInfo;
memset(&sConInfo, 0 ,sizeof(CONNMGR_CONNECTIONINFO));
sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);

sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
//最高优先级
sConInfo.dwPriority =CONNMGR_PRIORITY_USERBACKGROUND;// CONNMGR_PRIORITY_USERINTERACTIVE;

sConInfo.dwFlags =CONNMGR_FLAG_PROXY_HTTP|CONNMGR_FLAG_PROXY_WAP|CONNMGR_FLAG_PROXY_SOCKS4|CONNMGR_FLAG_PROXY_SOCKS5;;
sConInfo.bExclusive = FALSE;
sConInfo.bDisabled = FALSE;
for (int i = 0;i<10;i++)
{

if (!wcscmp(AConInfo[i].ConName,L"GPRS2"))
{
MessageBox( NULL, AConInfo[i].ConName,TEXT("移动GIS系统"), MB_ICONINFORMATION | MB_OK );

sConInfo.guidDestNet = AConInfo[i].Aguid;//这里想用指定GUID来指定GPRS的接入点,不行,结果还是从程序自己选择的接入点连接了,一般是在连接设置中按顺序排列的第一个可用的接入点
break;
}
}
//sConInfo.guidDestNet = IID_DestNetInternet; //IID_DestNetWAP//这是默认的情况下的GUID,这里是程序自己去选择接入点

if (ConnMgrEstablishConnectionSync(&sConInfo, &hConnection, 30000, &dwStatus)==S_OK)
{

//MessageBox(NULL,L"Success",L"Success",MB_OK);
return TRUE;
}
else
{
//MessageBox(NULL,L"False",L"False",MB_OK);
return FALSE;
}
}


///////////////////////////////////////////////////////////////////////
//funciton:EstablishDatacall
//establish connection with web
//Output: IP code
//return value: BOOL
//////////////////////////////////////////////////////////////////////
BOOL EstablishDatacall(TCHAR *IPout)
{
CHAR szHostname[255];
TCHAR IP[17];
HOSTENT *pHostEnt=NULL;
int nAdapter = 0;
IN_ADDR *tsim=NULL;
BOOL tried2Connect=FALSE;

IP[0]=0; // Clear the IP Address
if (IPout!=NULL) IPout[0]=0;
nAdapter=0;
gethostname( szHostname, sizeof( szHostname ));
pHostEnt = gethostbyname( szHostname );
while ( pHostEnt!=NULL && pHostEnt->h_addr_list[nAdapter] )
{
// in case a device has multiple ethernet cards
// i.e. 802.11, Bluetooth, USB-Cradle
// we need to go though all pHostEnt->h_addr_list[nAdapter]
tsim=(IN_ADDR *)pHostEnt->h_addr_list[nAdapter];
if (tsim->S_un.S_un_b.s_b1==192 ||
tsim->S_un.S_un_b.s_b1==169 ||
tsim->S_un.S_un_b.s_b1==127 ||
tsim->S_un.S_un_b.s_b1==255)
// If you want to make sure you have a real Internet
// connection you cannot bet on IpAddresses starting with
// 127 and 255. 192 and 169 are local IP addresses and
// might be routed or proxied
nAdapter++;
else
{
wsprintf(IP,TEXT("%d.%d.%d.%d"),
tsim->S_un.S_un_b.s_b1,
tsim->S_un.S_un_b.s_b2,
tsim->S_un.S_un_b.s_b3,
tsim->S_un.S_un_b.s_b4);
if (IPout!=NULL)
{
wsprintf(IPout,IP);
return true;
}
}
}

return false;
}
...全文
3888 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
andyflyrain 2010-10-18
  • 打赏
  • 举报
回复
lqfzl0 2009-03-20
  • 打赏
  • 举报
回复
这贴都结了呀,问题解决怎么样了哟
IMGGTOO 2008-05-23
  • 打赏
  • 举报
回复
我之前只考虑了从哪个大的接入点去连接GPRS,就像同花顺Mobile版上的那个效果一样。
没想到楼主考虑的更细!不知道现在实现了没有?

另外,如何判断当前是否已经有GPRS连接?以及该连接时从哪个接入口接入的,不知道楼主有没有研究?
l1w1w1 2008-03-04
  • 打赏
  • 举报
回复
貌似有专门的函数提供了呀。
nihao38 2008-02-19
  • 打赏
  • 举报
回复
我想问一下:
(1)当前手机没有GPRS网络连接,要自动连接上CMWAP方式上网(如何判断不是CMNET),代码怎么写?
(2)如何断开当前GPRS网络,代码怎么写?
ren54 2008-02-19
  • 打赏
  • 举报
回复
对这个问题保持关注,我也遇到了这个问题。
2021‘someday 2008-01-24
  • 打赏
  • 举报
回复
楼上的兄弟先谢谢了,你那是大类的优先级,我要做的是先把大类里的所有连接都找出来作为一个队列,然后在这里再指定连接点,而不管这个连接点是CMWAP或者APN或者CMNET的哪个大类,这多个大类里的各个连接点放在一起选择,我不管它是那个类的,比如CMWAP有连点名称为WAP1,WAP2,WAP3,APN有连接点名称为APN1,APN2,APN3,CMNET有连接点名称为NET1,NET2,NET3,那么我前面的代码里AConInfo这个数组已经保存了这九个连接点的名称和对应的GUID,现在我想选择其中一个作为连接点,从这个指定的连接点连接到网络,要怎么做?
rodking 2008-01-22
  • 打赏
  • 举报
回复
string configPreferred = "<wap-provisioningdoc>" +
"<characteristic type=\"CM_Planner\">" +
"<characteristic type=\"PreferredConnections\">" +
"<parm name=\"{GUID}\" value=\"APN\" />" +
"<parm name=\"{GUID}\" value=\"CMWAP\" />" +
"</characteristic>" +
"</characteristic>" +
"</wap-provisioningdoc>";

try
{
XmlDocument xmlPreferred = new XmlDocument();
xmlPreferred.LoadXml(configPreferred);
ConfigurationManager.ProcessConfiguration(xmlPreferred, false);
}
using Microsoft.WindowsMobile.Configuration;

这样可以在注册表中修改使得APN为优先级最高的连接,CMWAP次之。在.net环境下测试通过
2021‘someday 2008-01-21
  • 打赏
  • 举报
回复
我测试了参数dwPriority能取的所有值,还是不能按我指定的GPRS接入点连接网络啊,这个到底要怎么做啊?
2021‘someday 2008-01-18
  • 打赏
  • 举报
回复
遍历所有的连接点存放在一个结构数组里后,如何将我想要设置的那个连接设为优先连接呢?
rodking 2008-01-18
  • 打赏
  • 举报
回复
也就是如果当前没有连接的话,它会自动建立这个优先连接,如果有话,你得先断开这个连接
rodking 2008-01-18
  • 打赏
  • 举报
回复
lz,我试过很多种方法,但都没有找到能完全实现的。最后发现只有将你想要设置的那个连接设为优先连接,这个办法算可行。
xiangding 2008-01-18
  • 打赏
  • 举报
回复
你应该遍历所有的可用连接,找到GPRS连接,

GPRS连接只会有一个的, 不会有多的,呵呵,
2021‘someday 2008-01-17
  • 打赏
  • 举报
回复
问题是要怎么设置,才能从指定的接入点连接,而不是程序后台自动去选取一个连接,
cangwu_lee 2008-01-17
  • 打赏
  • 举报
回复
不是已經夠多了。
根據名稱,得到連接信息,去連接

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧