Android设备通过基于服务器的TCP代理进行设备通信

时间:2012-05-14 11:31:12

标签: android sockets tcp p2p

我目前正在开发一个Android应用程序,它需要两台设备通过TCP进行通信(我无法静默地丢失数据包,因此UDP已经用完)。我需要尽可能快的通信(即我有一个低的可接受的延迟阈值),但连接将是短暂的(可能少于2分钟)。手机将连接,做他们的事情,然后关闭连接。

我已经做了很多关于NAT打孔的研究,但似乎没有为java和android实现可靠的tcp打孔方法。因此,似乎我唯一的选择是开发一个服务器应用程序,它将“代理”两个设备之间的tcp通信。

我有两个问题:

1)我不想重新发明轮子:是否已经编写了一个简单的tcp代理我可以使用? (注意:不是任何类型的http代理 - 因为我需要低延迟,我只是想在设备上的两个tcp套接字连接之间传递一个非常小的有效负载)。服务器的唯一目的是避免NAT问题。

2)如果没有,有没有人有这种事情的经验,他们会推荐什么?我已经解决了Java NIO的想法,或者可能是为每个连接创建一个新线程的服务器(问题是如何链接相应的“客户端”线程以来回传递信息)。或者Java甚至是用于服务器端的最佳语言?

我已经阅读了一些通过谷歌聊天服务使用XMPP的建议(参见here),但我不想要XMPP的开销。

非常感谢任何方向或建议。

1 个答案:

答案 0 :(得分:0)

至于你问题的直接答案:

1)我找不到一个好的,它实际上取决于您服务器上的可用内容。我之前用PHP编写了一个,非常快速和简单,可以与大多数服务器一起使用。我用这个作为指南http://devzone.zend.com/209/writing-socket-servers-in-php/

如果您可以运行已编译的C ++二进制文件,您可以在此处查看,它是我们考虑的替代方案: http://tcpproxy.codeplex.com/

2)对于PHP选项,请参阅1的答案,我没有从头开始用Java编写的经验。

作为NAT遍历的一部分......我一直在调查我正在研究的项目的相同NAT问题,我找到了两个需要NDK但可以在Android上进行NAT遍历的选项。 pjnath(GPL):

www.pjsip.org/pjnath/docs/html

code.google.com/p/csipsimple/source/browse/trunk/pjsip_android/?r=201

libnice(LGPL):

nice.freedesktop.org/wiki /