这段时间参与了一个项目,我被分派的任务是做一个类似与城管通的运行于smartphone上的软件,基于windows ce 5.0 + windows mobile smartphone sdk,因为此前对次一无所知,我们公司此前也没有做过,都是外包给别的公司做的,因为考虑到接下来还有较多类似项目,所以想借此机会,自己把它拿下。
通过内部的协调,这块任务的安排是由我和项目经理共同完成,我主要负责应用端的,而他主要负责服务器端的,通过初步分析,我们概括出几大技术难点:
1)XML技术:主要用于系统的配置,元数据定义;
2)数据压缩:因为是通过gprs传送数据,所以数据容量应尽可能的小,主要数据包括照片或者语音等;
3)电话功能:单键拨号;
4)拦截短消息:因为服务器端是通过短消息的方式给应用端发送短消息,因此程序需要能够拦截特定的短消息;
5)获取系统中的各种资源:资源包括照片,语音等等,还有可能包括设备的控制,比如启用摄像头等等;
6)GPRS发送数据:数据压缩后通过gprs进行发送,这里面涉及的技术细节较多,我对此目前还是比较模糊,下文将就gprs这块做详细说明,当然还有很多疑惑目前不得而知。
通过两周的学习,随着对智能手机的逐步了解,最终决定采用.net cf + vs2005的方式进行开发,当然还是使用自己习惯的语言C#,MFC 尽管之前也用过,但已经丢下好一段时间了,考虑到时间问题(只有一个多月的时间),采用了较为稳妥的方法。
1、 XML方面已经有了一些较为简单但适用的类,应该不存在太大问题;
2、数据压缩方面使用目前开发源代码的SharpZipLib;从官方网站下载压缩包的话,里面还带有一些sample可以参考。使用起来也很方面,目前还不知道如何实现分卷压缩,但这个问题也不是重点。
3、单键拨号的功能事实上很简单,只需要调用一个api就完事了,so easy!api还真是好东西。
4、拦截短消息方面,微软包装了一个类(MessageInterceptor),通过它,只需要简单的几行代码,即可实现短信拦截,但目前还没有开始进行测试。
5、目前只需要找到图片和语音,采用一个类似于openfiledialog的form,找文件也算是比较方便,这些类也是包含在MSDN上提供的sample solution中的,以微软的实力,这些东西的测试都可以省了,在此感谢他们:)
6、GPRS方面可以说是我目前碰到的最大的障碍了,在网上看了很多帖子,搜了很多资料,适用的好少,看的懂的就更少了,感谢csdn上的几位前辈,让我多了一些了解。在此我摘抄一些片段:
================================================
下面的图例为 串行接口和以太网口 在INTERNET 上传输的比较
----- 应用层 --------
__________________ __________________
| | | |
| TCP | 传输层 | TCP |
|----------------| |----------------|
| IP | 网络层 | IP |
|----------------| |----------------|
| PPP协议 | 数据链路层 | 以太网协议 |
|----------------| |----------------|
| 串行接口 | 物理层 | 以太网 |
|________________| |________________|
GPRS模块 首先通过AT命令 拨号 ,如中国移动的“*99***1#”,如果 CONNECT OK的话,那么就说明物理层已经连通了。
那么接着要做的
工作
就是连通 数据链路层 ,那么就是 PPP协议了。
PPP协议包括 LCP(链路控制协议),NCP(网路控制协议),
也就是说物理层连通之后,首先就要通过LCP协议 来配置 串口线路的各项数据格式,和双方的传送数据的约定(详见 RFC,后面结尾会列出RFC的具体文件,供参考),之后就是NCP协议了,NCP 主要是获得IP地址,以及以后在PPP封装中的IP报文的一些具体约定。
之后就可以在PPP报文中封装IP报文进行传送了。
TCP层,当然就是按照TCP协议建立稳定可靠的TCP连接,
最终在物理层(串行线路)传送的的数据格式应该如下了
_____________________________________________________
| PPP数据头 | IP数据头 | TCP数据头 | 数据 |
|_____________|____________|_____________|__________|
1549 PPP in HDLC Framing
1552 The PPP Internetwork Packet Exchange Control Protocol (IPXCP)
1334 PPP Authentication Protocols
1332 PPP Internet Protocol Control Protocol (IPCP)
1661 Link Control Protocol (LCP)
1990 PPP Multilink Protocol
2125 The PPP Bandwidth Allocation Protocol (BAP), The PPP Bandwidth Allocation Control Protocol (BACP)
2097 The PPP NetBIOS Frames Control Protocol (NBFCP)
1962 The PPP Compression Control Protocol (CCP)
1570 PPP LCP Extensions
2284 PPP Extensible Authentication Protocol (EAP) )
================================================
DTE是指数据终端设备,比如你可以认为PC就是一个DTE(当它利用MODEM通信时,而MODEM就是DCE)。如果你是在 开发 手机上运行的软件的话,那么应该可以找到相应的接口获得IP而不使用PPP。但是如果你是开发PC、DTE上利用GPRS MODEM上网的软件,那么目前没法绕过PPP。
================================================
暂时先写这些,后续有什么发现,再追加上来,希望到时候这篇文章不会臃肿不堪。
在项目完成之后,到时会做一个总体的介绍,时间大概是在半个月之后吧。