2012-05-10 18 views
0

我们正在开发一个通过wifi发送和接收文本消息的android应用程序。 我们使用TCP套接字进行此通信(IP地址和随机端口),但问题是,如果我不允许从我的路由器的“端口转发部分”输入这些端口号,则不能发送消息。 有什么办法摆脱这个问题?需要针对android套接字编程的建议

+0

Eh,你总是可以启动一个免费的EC2服务器 – Perception

+0

为什么不选择一个端口,或者一些可预测的算法来选择端口,并且可以在两边进行复制? – FoamyGuy

+0

即使我们选择一个端口号并尝试与它连接,我们仍然需要从路由器做端口转发。 – ademcu

回答

0

你可以从选择范围内挑选随机端口和转发范围在你的路由器是这样的:

INT端口=(Math.abs(random.nextInt()))%3000 + 1024;

这样,我已经产生的随机数介乎1024和2999还是只挑选一个固定的端口。

+0

这正是我们所做的。问题是,路由器doenst允许通信,除非我们允许它使用spesific端口。 – ademcu

+0

那么这将是你的路由器的问题,我会说。因为这是我迄今使用过的。 –

+0

这是我不明白:当我们尝试发送消息与我们的应用程序,我们需要从路由器允许该端口。 当我们尝试使用随机端口下载任何BT客户端时,没有任何问题。 这两个应用程序都是p2p。我如何下载文件,但无法发送/接收消息? – ademcu

0

如果两个客户是不同的限制性防火墙之后,你应该看看holepunching,其中两个客户端打开与第三个服务器的连接,那么第三个服务器预测端口上的NAT开启:NAT traversal with Javahttps://stackoverflow.com/questions/917385/nat-traversal-with-java/。请注意,这是P2P应用程序(即客户端到客户端)通常需要的,如您在此处所述。是的,这是非常复杂和令人讨厌的:(

您可能会更好地将消息存储在云中,像Amazon Cloud Services,并使用基于推送的机制来通知对方接收消息,也许使用长轮询HTTP。