0

我目前正在开发一个需要两个设备通过 TCP 通信的 android 应用程序(我不能静默地丢失数据包,所以 UDP 不可用)。我需要尽可能快的通信(即我有一个低可接受的延迟阈值),但连接将是短暂的(可能少于 2 分钟)。电话将连接,做他们的事情,然后关闭连接。

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

我有两个问题:

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

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

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

任何方向或建议将不胜感激。

4

1 回答 1

0

至于您的问题的直接答案:

1) 我发现这不是一个好方法,这实际上取决于您的服务器上可用的内容。前段时间我确实用 PHP 写过一个,它非常快速和简单,可以与大多数服务器一起使用。我以此为指导http://devzone.zend.com/209/writing-socket-servers-in-php/

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

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

顺便说一下 NAT 遍历...我一直在为我正在处理的项目调查相同的 NAT 问题,我发现了 2 个需要 NDK 但可以很好地用于 Android 上的 NAT 遍历的选项。pjnath (GPL):

www.pjsip.org/pjnath/docs/html

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

库(LGPL):

nice.freedesktop.org/wiki/

于 2012-05-24T09:55:22.803 回答