WINCE设备UDP SOCKET开发体会
最近项目要求做一个监控项目,初步决定采用TCP+UDP的方式来实现。
在PC上一切调试通过,可部署到服务器和WINCE终端上后,出现了一些没有预料到的问题,只能说经验太少。
经过一段时间的测试和请教,监控服务开始试提供了,在此特感谢张国威在开发过程中的热情帮助。
以下是在开发过程中的一些体会,不保证完全正确,但都是在开发过程中碰到的一些问题,如有错误,敬请指正,不胜感激。
注:本文档中提到的socket均为UDP方式。
1,WINCE终端通过GPRS连接到网络,网络运营商会随机分配一个局域网ip给终端,终端需要通过通信运营商的网关连接到公网实现数据的收发。
2,在终端使用的过程中,如果出现重启或者断线重连的情况,那终端的ip也会随之改变。
3,WINCE终端上创建socket,往服务器指定端口发送数据时,在持续发送数据的过程中,会出现端口改变的情况,具体变化和终端向服务发送数据的时间间隔有关,具体分析如下:
假设设备和服务器的连接超时时间为T(该超时经过测试,用移动的GPRS,超时时间大概在30s左右),终端向服务器发送数据的时间间隔为t,则:
a) t < T:终端向服务器发送数据的端口不会改变,服务器也能向终端推送数据。
b) t > T:终端向服务器发送数据的端口发生改变(系统指定),服务器向终端推送数据失败。
4,鉴于3所描述的现象,难道终端上的socket不能调用bind绑定指定端口吗?经测试,即使调用bind函数来指定端口,可从服务器接收到的数据包来看,端口并非是指定的端口(这个是为什么?请高人解惑)。
5,服务器采用收发使用不同端口的模型的分析:
a) 终端创建socket,向服务器的recvPort发送数据;
b) 服务器收到数据后,使用sendPort向终端发送处理结果;
该模型使用的情况分析:
1) 服务器-终端:同一局域网,A成功,B成功;
2) 服务器-终端:公网-公网,A成功,B成功;
3) 服务器-终端:公网-局域网,A成功,B失败;
结论:
1,WINCE设备不能创建一个只接收数据的服务端.
2,WINCE设备的超时时间大概30秒到一分钟左右.
3,如果要实现服务器下发数据到终端,则终端需定时发送心跳包(心跳包时间间隔需小于超时时间)