Windows Mobile设备上的连接管理器

Windows Mobile设备上,连接管理器是一个关键的组件,它负责集中管理和自动化建立多种类型的网络连接。这些连接可以是针对互联网或企业网络的连接。当一个或多个应用程序请求连接时,连接管理器会选择最佳的连接类型,并通知所有应用程序连接已经激活。应用程序需要配置连接名称和网络名称。

连接管理器的作用

连接管理器跟踪应用程序正在使用或请求的连接。它关闭未使用的连接,自动断开空闲一定时间的连接,并关闭低优先级的连接以打开高优先级的连接。例如,语音连接通常比数据连接具有更高的优先级。

连接管理器能够处理多种不同类型的连接,包括点对点协议(PPP)、远程访问服务(RAS)和点对点隧道协议(PPTP)连接。它还可以配置代理服务器设置,以允许网络资源通过防火墙或无线应用协议(WAP)网关。

连接监视器应用程序块

这个应用程序块由微软的模式与实践小组提供。它允许应用程序从移动设备检索连接信息并监控连接状态的变化。

连接管理器函数

连接管理器API包含大约11个函数,但通常只需要两个函数来了解连接状态。

  • ConnMgrEnumDestinations:枚举可用网络。
  • ConnMgrQueryDetailedStatus:返回Windows Mobile设备上现有数据连接的详细信息。

连接管理器应用程序块

这个应用程序块提供了托管API,用于从移动设备建立或释放连接。它弥补了托管代码中的空白,使用户能够管理自己的连接。

连接管理器函数

连接管理器API包含大约11个函数,但通常只需要六个函数来建立和释放网络连接。在许多情况下,应用程序可能只需要两个函数。

  • ConnMgrMapURL:检索指定URL的网络标识符(互联网或工作)。
  • ConnMgrEstablishConnection:选择并建立指定网络标识符的适当连接。此方法返回而不等待连接尝试完成;使用ConnMgrConnectionStatus来确定连接状态。
  • ConnMgrEstablishConnectionSync:选择并建立指定网络标识符的适当连接。此方法直到连接尝试完成才返回。
  • ConnMgrReleaseConnection:释放指定的连接,这也可能关闭连接。
  • ConnMgrConnectionStatus:检索指定连接的状态。
  • ConnMgrMapConRef:将连接引用映射到其对应的GUID。此函数允许绕过连接规划器,通过显式提供将映射到连接的GUID。

使用代码

CMConsole是示例代码,展示了用户如何使用连接监视器和连接管理器应用程序块。这部分连接监视器示例由微软模式与实践小组提供,并已增强,以展示如何使用连接管理器应用程序块建立连接。

控制台屏幕显示了在app.config中定义的不同连接:蜂窝连接、NIC连接和桌面连接。

public ConsoleForm() { InitializeComponent(); monitor = ConnectionMonitorFactory.CreateFromConfiguration(); monitor.ActiveNetworkChanged += NetworkChangeHandler; }

ConnectionMonitorFactory.CreateFromConfiguration()返回一个ConnectionMonitor对象,该对象跟踪配置文件中指定的各种连接的状态。

private void mnuConnect_Click(object sender, EventArgs e) { const int CONNMONITOR_STATUS_CONNECTED = 0x10; ConnectionMonitorNativeHelper.CONNMONITOR_CONNECTION_DETAILED_STATUS cnStatus = cnList[lstConnection.SelectedIndex]; if (_connectionHandle != IntPtr.Zero) { ConnMgrReleaseConnection(_connectionHandle, 0); _connectionHandle = IntPtr.Zero; } if (cnStatus.dwConnectionStatus != CONNMONITOR_STATUS_CONNECTED) { ConnMgrStatus status = ConnMgrStatus.Unknown; Guid forceConnGuid = new Guid(); if (ConnMgrMapConRef(ConnMgrConRefTypeEnum.ConRefType_NAP, cnStatus.pszDescription, ref forceConnGuid) != 0) { ConnMgrMapConRef(ConnMgrConRefTypeEnum.ConRefType_PROXY, cnStatus.pszDescription, ref forceConnGuid); } ConnMgrConnectionInfo info = new ConnMgrConnectionInfo(forceConnGuid, ConnMgrPriority.HighPriorityBackground); ConnMgrEstablishConnectionSync(info, ref _connectionHandle, _syncConnectTimeout, ref status); if (status == ConnMgrStatus.Connected) MessageBox.Show("Connect Succeeded"); else MessageBox.Show("Connect failed: " + status.ToString()); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485