TCP客户端/服务器与多播广播

时间:2012-07-19 18:05:18

标签: android tcp multicast android-wifi local-network

我正在开发一个无市场应用程序,运行在20-30个Android设备(特定于具有android蜂窝/ ICS OS的平板电脑的目标)维持与本地WIFI网络的连接1-2小时的时间段,并且需要在它们之间交换数据(表示命令的简单对象)。

大多数情况下,一个特定的平板电脑的行为类似于发送命令的服务器,而其他设备如接收命令的客户端,但“客户端”也有时会向“服务器”发送命令。

作为这种通信需求的解决方案 - 我正在使用一段时间的开源 封装TCP客户端/服务器协议的库,名为-Kryonet。 我发现它很容易使用,并且基本上可以完成这项工作,虽然它有时“不稳定” - 会产生很多断开连接。 我无法承受这种断开,它会破坏整个流程和用例,导致客户端失去命令。

我正在做一些恢复逻辑,重新连接客户端并向他们发送他们错过的内容,但这对用例来说还不够好。

最近我听说过多播广播协议,甚至发现了一个开源库调用 - 最佳实现这个协议的JGroups,并且公开了简单易用的界面。仍然没有尝试过,但得到了一个知道的人的建议,说为了我的目的,TCP客户端/服务器应该更好。

  • 我应该用什么方法来实现我描述的行为? (不一定是我建议的两个之一)

TIA

1 个答案:

答案 0 :(得分:3)

虽然JGroups承诺更好地解决您的情况,但您可能需要多尝试一下以确定断开连接的原因。由于您的客户端和服务器都是平板电脑,因此还有一些其他原因无关:

1)如果未在Service中维护连接,则默认情况下它们将非常不可靠。 (请参阅this question关于在Android中销毁的单身人士)

2)如果套接字未设置为“keepalive”,则它们将在任意秒数后超时。

3)您使用的设备在进入睡眠状态时可能会关闭一些持久连接。

4)平板电脑可能正在退出WiFi范围,并切换到移动网络。

在多台桌面计算机上尝试代码的网络部分,以确定问题是否与Kryonet或您的代码有关,或者问题是否在Android上运行。