请大家会审:Symbian系统的SDK开发包中的Sockets范例成熟可靠吗?
我在进行sokets通讯程序编写时,使用了sdk中的范例。
在一般情况下,这个范例是能够完成任务的,但是在进行24小时长时间通讯测试时,它基本上都无法通过。
我在那个范例程序中,只是加上很少的代码,每次与服务器之间的通讯,只发送"PK"两个字符。
有三点比较令人满意,一是大多数的连接都能跟服务器端连接成功;二是服务器运行正常,没有发生过异常;三是用PC的客户端程序通讯,能够经历长时间的测试,说明服务器端程序是可靠的。
但是用手机进行测试时,如果在接收到字符后立即进行发送字符,基本上字符互送很快就中止,可能是有点堵塞的原因。
所以我的做法是:
在程序中做一个定时器,在接收到字符后间隔一点时间(通常是0.5秒),达到间隔时间后就向服务器发字符,服务器接收到字符后,就会将原字符原封发回,手机客户端收到字符后再启动下一次发送的定时器,同时清除超时定时器,循环重复,希望能够进行24小时的通讯。
在手机客户端向服务器发送字符后,同时启动另一个超时定时器(通常是3秒),如果这个定时器触发后,表明上一次的发送没有得到服务器的回应,所以需要重新发送上一次的数据。
这种做法的结果:
这样的通讯模式能够进行一段时间,但是当手机进入屏幕保护后,多数情况会发生异常:或者程序自动退出,或者死机(按挂机键可退出程序),在手机信号图标的地方可看到一个G加方框,可能表示GPRS在开通,这时候启动其他的程序,或者用上网功能,一般得到的提示是网络无法使用,将手机关机后再打开,一切恢复正常!
有几个问题要请教:
1、当超时定时器触发时,能否判断上一次的数据包是否已经发出?到底要重发还是等待?联众游戏会向用户提这个问题,在手机我想自动解决。
2、当多次无法收到服务器的数据后,到底连接已经断开?还是继续在线?
3、如果已经断开,怎么重新连接?(这个问题我还没有深入研究)
4、如果连接还在但无法通讯,可能是堵塞了,怎么才能复位?
5、总体而言,这套sokets范例是否可靠?