关于windows mobile5 设备连接数据线的网络问题

最后:希望高手给与指点。 雁过留声,人过留名

 

开始:

windows mobile 通过数据线连接PC,其实是建立一个虚拟的网。在你PC的网上邻居能看到

地址好像是:168.xx.1.2 大概就是这个样子。 网络的建立是通过那个ActiveSync。

 

在wm手机上会有好多网络连接。你可以枚举一下,好几个,真的!

 

你写的程序可能在不插上数据线的时候很正常,可是插上之后就不正常了,就是由于这个虚拟网的原因。

WM不会自己找,那就需要我们给他指定!

 

在网上找了很多资料,测试了一个正常的。

#include "stdafx.h"
#include "winsock.h"  
#include <objbase.h>  
#include <initguid.h>
#include <connmgr.h>
#include <connmgr_proxy.h>
#pragma comment( lib, "cellcore.lib" )

void ConnectGPRSNet( HANDLE& hConnection )
{
    int hResult;
    CONNMGR_CONNECTIONINFO ConnInfo;
    memset( &ConnInfo, 0, sizeof(ConnInfo));
    ConnInfo.cbSize = sizeof(ConnInfo);
    ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
    ConnInfo.dwPriority = CONNMGR_PRIORITY_HIPRIBKGND;
    ConnInfo.dwFlags=0;
    ConnInfo.guidDestNet = IID_DestNetInternet;
    DWORD dwStatus;
    hResult = ConnMgrEstablishConnectionSync(&ConnInfo, &hConnection,30000, &dwStatus);

}

// 释放连接  连接完毕要删除地
void ReleaseGprsConnection ( HANDLE& hConnection )
{
    if ( hConnection )
    {
        ConnMgrReleaseConnection(hConnection, FALSE);
        hConnection = NULL;
    }
}

 

这个在你程序的初始化时ConnectGPRSNet 一下, 在程序终止时ReleaseGprsConnection 一下。

 

由于有的程序会要求指定具体的网络。那么上面那个就不好了。下面时一个大致的代码,网上找的,写在这里留念。

oid ConnectGPRS()
{
 //连接GPRS
 DWORD dwStatus;// = 0;
 HANDLE hConnection=NULL;
 CONNMGR_CONNECTIONINFO sConInfo;
 memset(&sConInfo, 0 ,sizeof(CONNMGR_CONNECTIONINFO));
 sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);
 sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
 sConInfo.dwPriority = 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;
 sConInfo.guidDestNet = IID_DestNetInternet; //IID_DestNetWAP
 sConInfo.hWnd = 0;
 sConInfo.uMsg = 0;
 if (FAILED(ConnMgrEstablishConnectionSync(&sConInfo, &hConnection, 60000, &dwStatus))) ;
 //目前,移动的WAP网关对外只提供HTTP代理协议(80和8080端口)和WAP网关协议(9201端口),
 //彩信还有单独配置接入点是因为彩信服务需要连接专用的服务器。
 //所以把上面那段代码中的IID_DestNetInternet换成IID_DestNetWAP,实际中是不能连通GPRS的。
 if (hConnection)
 {
  ConnMgrReleaseConnection(hConnection, FALSE);
  hConnection = NULL;
 }
 CStringArray StrAry;
 CONNMGR_DESTINATION_INFO networkDestInfo = {0};
 // 得到网络列表
 for ( DWORD dwEnumIndex=0; ; dwEnumIndex++ )
 {
  memset ( &networkDestInfo, 0, sizeof(CONNMGR_DESTINATION_INFO) );
  if ( ConnMgrEnumDestinations ( dwEnumIndex, &networkDestInfo ) == E_FAIL )
  {
   break;
  }
  StrAry.Add ( networkDestInfo.szDescription );
 }

 int Index =0;
 //查找“WAP”的索引
 for (int i = 0; i < StrAry.GetCount(); ++i)
 {
  if (StrAry[i] == L"WAP")
  {
   Index = i;
   break;
  }
 }
 // 得到正确的连接信息
 CONNMGR_DESTINATION_INFO DestInfo = {0};
 HRESULT hResult = ConnMgrEnumDestinations(Index, &DestInfo);
 BOOL bRet = FALSE;
 if(SUCCEEDED(hResult))
 {
  // 初始化连接结构
  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_HIPRIBKGND;//CONNMGR_PRIORITY_USERINTERACTIVE;
  ConnInfo.guidDestNet = DestInfo.guid;
  ConnInfo.bExclusive = FALSE;
  ConnInfo.bDisabled = FALSE;

  DWORD dwStatus = 0;
  hResult = ConnMgrEstablishConnectionSync(&ConnInfo, &hConnection, 100*1000, &dwStatus );
  if(FAILED(hResult))
  {
   MessageBox(NULL,L"连接失败",L"错误信息",MB_OK);
   hConnection = NULL;
  }
  else
  {
   MessageBox(NULL,L"连接成功",L"错误信息",MB_OK);
  }
 }
}

 

 

 

 

 

你可能感兴趣的:(windows,网络,服务器,null,mobile,WAP)