2012-05-10 19 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。