最近在做一个GPS定位平台,平台建立在局域网内部,为了建立一条到终端的移动GPRS通道,必须要考虑以下几件事情:
- GPS终端必须配备有一张SIM卡,且开通了GPRS服务。以移动为例,终端接入Inernet的方式有两种:cmwap 和 cmnet, 根据网上牛人总结说:以前cmwap一般只提供为在移动内网中的服务器连接(我想就是90年代末的移动百宝箱之类的服务器吧),但是由于业务的需求,通过网络代理服务器功能也能连接Inernet的,只是网速相对较慢;而cmnet就如我们平时常见的pc接入因特网的方式,速度较快,当然资费相对贵些,所以一般以包月包流量为宜。
- GPS服务器处的网关IP(公网IP)最好为固定,否则每次的公网IP变动都得更改GPS终端的服务器IP设置,会显得繁琐。又由于服务器是处于内网的,为了让数据包顺利通过网关抵达,必须要在网关中设置 端口映射 (NAT技术的一种),可能要同时需要TCP和UDP两种,因终端而异。
- 设置GPS终端的参数:服务器IP地址及端口(2中网关的公网ip以及外部端口);开启GPRS功能等
- 至此,物流层面的数据通信应该建立(可以用wireshak等抓包软件监视指定网卡及端口信息,容易验证是否通道已建立成功)。数据的上传很简单,因为终端知道服务器ip,给该公网ip发送数据包,肯定能够顺利到达;但是服务器不知道终端的ip地址,如何给终端下发指令呢? 事实上,服务器确实不能主动给终端下发指令,但是利用TCP协议的“面向连接性”以及“双工传输性”可以到达我们的目的。具体操作如下:
- GPS终端定时主动给服务器发送一个请求数据包(移动网关(动态随即分配一个端口) 自动会同服务器通过TCP著名的三次握手后建立一个连接),此时GPS服务器再利用该Socket就可以下发指令到终端,到达控制、设置终端的目的。如此便很巧妙地解决平台无法主动连接终端的难题。另外,移动网关临时给该连接分配的端口,并不会存在太长时间,因此每隔一段时间GPS终端得再次发送一个请求包以建立一个新的连接,而终端需要丢弃之前的Socket,采用新的来发送数据。
以上是自己的个人总结,如有说得不准确的地方,欢迎大家拍砖 :)