Windows Mobile Gprs连接与数据传输

 

此模块分两部分完成,传输数据用socket ,要使用socketppc上进行数据传输,就要谁让ppc自动连接gprs 。其中套接字和gprs链接分别进行说明。

 

一 ,应用程序在进行其它所需的Windows Sockets API调用需要进行一次成功的WSAStartup()调用,然后就是套接字编程。分为服务器端和客户端。

 

服务器:

先建立套接字

 

 
   
SOCKET WSASocket(

int af,

int type,

int protocol,

LPWSAPROTOCOL_INFO lpProtocolInfo,

GROUP g,

DWORD dwFlags

);
// 具体参数参见设置MSDN

 

 

然后初始化一个SOCKADDR_IN结构体,然后用bind()将本地ip与端口与socket进行绑定,之后用listen()监听该套接字,如果有连接请求则使用accept()建立连接,然后用send()recv()接受和发送数据,最后关闭套接字。

客户端:

客户端与服务器端不同的是不需要进行socket绑定,不需要监听是否有连接请求,也不用accept()建立连接,而是用connect()发起连接请求。

 

进行调试时必须先运行服务器端,再运行客户端。

 

二,首先我们利用ConnMgrApiReadyEvent()函数来确认是否有可用连接,利用此函数来我们可以返回一个连接事件的句柄 ,注意在的得到句柄后要记得及时释放,

然后用WaitForSingleObject()函数的返回值可以判断在指定时间内是否找到可用连接,如果返回值WAIT_OBJECT_0说明有可用连接,然后通过ConnMgrMapURL ()函数来选则一个最好的链接,函数原型为:

 

 
   
HRESULT WINAPI ConnMgrMapURL(
LPCTSTR pwszURL,
GUID
* pguid,
DWORD
* pdwIndex
);

 

 

 

ConnMgrMapURL()是通过给定的pwszURL地址,让系统自己选择一条最适合的网络连接来访问该URL,如果手机可以通过GPRS/Activesync/Wifi/3G等多种方式访问某个网络资源,用这个API你就不用担心到底该用什么方式联网,系统会自己给你选一条最适合的网络连接。第二个参数GUID * pguid是根据第一个参数pwszURL进行赋值,即你访问的URL是http还是wap,每种都有一个全局唯一标识。然后通过ConnMgrEstablishConnectionSync()进行连接,此函数要传递一个CONNMGR_CONNECTIONINFO结构体,用于保存客户端的连接信息。然后就可以进行socket通信了,就是第一部分所说的。最后用ConnMgrReleaseConnection()释放连接。

 

提示:cmwap所获得的地址是经过分组的,我抓几次包都是10开头的ip,输入内网,外网的服务器找不到这样的ip,cmwap是未分组的,抓包显示的就是公网ip.

 

PS:较久以前做的关于windows mobile的项目

转载于:https://www.cnblogs.com/shapherd/archive/2010/07/25/GprsOfWindowsMobile.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值