Windows Mobile中如何建立GPRS连接以便Socket能正常通信

最近编写一个医疗项目的程序,需要用 Windows Mobile 来做通信处理,需要将手机端的数据通过GPRS传送至公网上的一个服务器上。数据传输我采用的是socket,用数据线+ActiveSync调试通过,数据传输正常,在准备将软件提交给质检部门的时候,用真正的GPRS来做通信测试时,问题出来了,连接始终建立不了,但用手机的IE浏览器却能正常打开网页,而且奇怪的是只要用IE浏览器成功访问过一次网页,我的 socket 就能正常进行数据通信,看来传说中的GPRS常连接被我误解了。

手机开通GPRS以后,我们的socket 程序还不能直接建立网络连接,需要用连接管理器来获取当前可用连接,并自动选择一个最佳的连接途径,然后启用这个连接,在连接启动成功以后再用socket 进行网络连接方可正常进行。大概GPRS拨号和连接过程就是在这里自动进行的吧。源代码中封装了一个连接管理的类和测试代码,可以清楚地看到Windows Mobile 在socket 编程之前到底需要做什么样的操作。

首先需要枚举当前可用的连接

void CConnectManager::EnumNetIdentifier ( OUT 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 );
  }
}

接下来找到“Internet”这个连接,可用远程URL映射的方式来完成,这样可以让系统自动选取一个最好的连接。

int CConnectManager::MapURLAndGUID ( LPCTSTR lpszURL, OUT GUID &guidNetworkObject, OUT CString *pcsDesc/*=NULL*/ )
{
  if ( !lpszURL || lstrlen(lpszURL) < 1 )
    return FALSE;
  memset ( &guidNetworkObject, 0, sizeof(GUID) );
  int nIndex = 0;
  HRESULT hResult = ConnMgrMapURL ( lpszURL, &guidNetworkObject, (DWORD*)&nIndex );
  if ( FAILED(hResult) )
  {
    nIndex = -1;
    DWORD dwLastError = GetLastError ();
    AfxMessageBox ( _T("Could not map a request to a network identifier") );
  }
  else
  {
    if ( pcsDesc )
    {
      CONNMGR_DESTINATION_INFO DestInfo = {0};
      if ( SUCCEEDED(ConnMgrEnumDestinations(nIndex, &DestInfo)) )
      {
        *pcsDesc = DestInfo.szDescription;
      }
    }
  }
  return nIndex;
}

时间: 2024-11-03 21:36:23

Windows Mobile中如何建立GPRS连接以便Socket能正常通信的相关文章

Windows Mobile中使用WinCE驱动调试助手的小技巧

      驱动调试助手是针对Windows CE做的,在Windows Mobile中使用会有一些问题,最主要的就是其菜单栏被Windows Mobile系统的任务栏给遮住了,导致相应的功能无法正常使用,如下图所示.             按理来说只要将系统任务栏隐藏就可以,今天在模拟器上实验了一下,看起来是可行的.只是任务栏隐藏后,相应的区域出现画屏,如下图所示.             不知道画屏是不是模拟器的缘故,暂且不管先.驱动调试助手的菜单隐约可见,简单测试了下其中的注册表搜索的功

windows mobile中各种系统进程记录

个人记录 # 电话 Windowscprog.exe # 媒体播放器 Windowswmplayer.exe # 资源管理器 Windowsfexplore.exe # 时钟 Windowsclock.exe # 照相机 Windowscamera.exe # 照片 Windowspimg.exe -camerakey # 计算器 Windowscalc.exe # 通讯管理器 Windowswrlsmgr.exe # 短信 Windowstmail.exe -service "SMS"

Windows 8中如何创建宽带连接及设置方式

1.按Win键切换到传统的桌面界面,在任务栏上找到网络图标,右键任务栏网络图标,选择打开网络和共享中心; 2.点击设置新的连接或网络; 3.点击连接到 Internet; 4.选择宽带 PPPoE; 5.输入用户名.密码,点击连接; 6.在网络和共享中心,点击更改适配器设置; 7.右键点击宽带连接,选择创建快捷方式; 8.选择是,桌面上会出现宽带连接图标.

Windows 8中如何创建拨号连接及设置方式

1.按Win键切换到传统的桌面界面,在任务栏上找到网络图标,右键任务栏网络图标,选择打开网络和共享中心; 2.点击设置新的连接或网络; 3.选择连接到 Internet; 4.选择拨号; 5.输入电话号码.用户名.密码,点击连接(以北京用户为例,"拨打电话号码"可以填写96163,"用户名"填写163,"密码"填写163.不同地区填写的信息不同,具体信息可以向网络供应商咨询); 6.等待连接完成即可.

Windows 7操作系统如何设置网络连接

当我们在电脑上安装了新系统后,最重要的一件事就是让其可以连接到互联网.在Windows 7中,网络的连接变得更加容易.更易于操作,它将几乎所有与网络相关的向导和控制程序聚合在"网络和共享中心"中,通过可视化的视图和单站式命令,我们便可以轻松连接到网络.下面我们就来看看如何在Windows 7中使用有线和无线网络连接互联网. 首先来看看有线网络的连接,所有的操作其实非常简单与熟悉,与过去在Windows XP中的操作大同小异,变化的仅仅是一些界面的改动或者操作的快捷化.进入控制面板后,依

Windows Mobile设备常见开发任务

摘要:移动开发者社区开发杂志<Windows Phone应用开发专题 第一季>中我参与编写的部分,<Windows Mobile设备常见任务开发>.主要介绍了Windows Mobile中最常见的几个开发任务,如拨打电话.发送短信.联系人管理等等.此为索引页. 第四日 常用设备相关任务开发 序言 今天我们来了解一下在Windows Phone设备中,用托管代码进行常用任务的开发.本章所介绍的,是Windows Phone开发中最最常见的几个简单任务. 内容简介 本章主要包含三个小节

通信-在分布式系统中怎么建立深度优先生成树

问题描述 在分布式系统中怎么建立深度优先生成树 问题如下,在分布式系统中怎么建立深度优先生成树,要考虑到通信的时间延迟等问题.

Windows Mobile Gprs连接与数据传输

此模块分两部分完成,传输数据用socket ,要使用socket在ppc上进行数据传输,就要谁让ppc自动连接gprs .其中套接字和gprs链接分别进行说明.   一 ,应用程序在进行其它所需的Windows Sockets API调用需要进行一次成功的WSAStartup()调用,然后就是套接字编程.分为服务器端和客户端.   服务器: 先建立套接字 SOCKET WSASocket( int af, int type, int protocol, LPWSAPROTOCOL_INFO lp

在Windows Mobile Emulator建立网络连接

因为想使用Windows Mobile Emulator进行网络通信程序的测试,所以找方法配置Emulator的网络连接.在网上找了一些文章,很多都说需要安装Virtual PC 2007. 例如下面的文章Enable Network Connection Windows Mobile 6 Emulator 如果需要 Virtual PC 2007 可以在这里下载 http://www.microsoft.com/downloads/details.aspx?FamilyID=04d26402-