请大家会审:Symbian系统的SDK开发包中的Sockets范例成熟可靠吗?

vnking 2008-02-01 10:48:58
我在进行sokets通讯程序编写时,使用了sdk中的范例。

在一般情况下,这个范例是能够完成任务的,但是在进行24小时长时间通讯测试时,它基本上都无法通过。

我在那个范例程序中,只是加上很少的代码,每次与服务器之间的通讯,只发送"PK"两个字符。

有三点比较令人满意,一是大多数的连接都能跟服务器端连接成功;二是服务器运行正常,没有发生过异常;三是用PC的客户端程序通讯,能够经历长时间的测试,说明服务器端程序是可靠的。

但是用手机进行测试时,如果在接收到字符后立即进行发送字符,基本上字符互送很快就中止,可能是有点堵塞的原因。

所以我的做法是:

在程序中做一个定时器,在接收到字符后间隔一点时间(通常是0.5秒),达到间隔时间后就向服务器发字符,服务器接收到字符后,就会将原字符原封发回,手机客户端收到字符后再启动下一次发送的定时器,同时清除超时定时器,循环重复,希望能够进行24小时的通讯。

在手机客户端向服务器发送字符后,同时启动另一个超时定时器(通常是3秒),如果这个定时器触发后,表明上一次的发送没有得到服务器的回应,所以需要重新发送上一次的数据。

这种做法的结果:

这样的通讯模式能够进行一段时间,但是当手机进入屏幕保护后,多数情况会发生异常:或者程序自动退出,或者死机(按挂机键可退出程序),在手机信号图标的地方可看到一个G加方框,可能表示GPRS在开通,这时候启动其他的程序,或者用上网功能,一般得到的提示是网络无法使用,将手机关机后再打开,一切恢复正常!

有几个问题要请教:
1、当超时定时器触发时,能否判断上一次的数据包是否已经发出?到底要重发还是等待?联众游戏会向用户提这个问题,在手机我想自动解决。
2、当多次无法收到服务器的数据后,到底连接已经断开?还是继续在线?
3、如果已经断开,怎么重新连接?(这个问题我还没有深入研究)
4、如果连接还在但无法通讯,可能是堵塞了,怎么才能复位?
5、总体而言,这套sokets范例是否可靠?
...全文
177 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenstory 2008-06-06
  • 打赏
  • 举报
回复
我也用过这个例子来实现长时间运行,遇到的问题是

1.长时间(半小时以上)无数据传输则可能连接被断开,也就是图标变为打电话时网络连接的图标,然后不知道怎样重新启动,和你的4差不多.

2.大概3天到一周要重启一次.这点可能是我代码写得烂的原因,当时根本没有很严格的低堆栈使用概念,估计这点可用以下思路解决.
a.不要在周期函数中申请堆内存或者声明栈变量,将要用的变量声明为成员变量,在周期函数中只做赋值操作
b.程序一定要做到很好的栈变量控制,估计程序崩溃是长时间运行后栈耗尽

总体上,sockets例子还是不错的.
vnking 2008-06-06
  • 打赏
  • 举报
回复
半年过去了,对手机的应用要循序渐进,不能太冒进,技术问题要大家一起研究,成熟后再进一步!
SenerityChzr 2008-06-05
  • 打赏
  • 举报
回复

mark...

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧