2011-12-15 92 views
1

我正處於編寫應用程序的初期階段,需要將數據廣播到其他設備。3g以上的Android廣播

我首先想到的是使用UDP廣播,但根據雙方 http://code.google.com/p/boxeeremote/wiki/AndroidUDPAndroid 3G UDP Broadcast 他UDP將不能夠通過NAT,推動移動網絡 (這是我的應用程序必需的)上時。

我知道我可以使用服務器進行廣播,但是我寧願避免在我的家庭服務器上產生很多流量。

我能想到的最後一個選擇是有幾個tcp/ip連接並循環連接所有連接的客戶端併發送廣播。但由於我指望擁有至少30位聽衆,我相信這將會很貴。

我沒有任何廣播相關的代碼,但,這就是爲什麼我還沒有發佈任何;)

有沒有辦法通過NAT突破?手機能夠處理30個同時的tcp/ip連接嗎?或者我應該看看其他一些廣播方法嗎?

任何提示將不勝感激!

親切的問候 約翰RISCH

::::::::::::::::::::::::: ADDED ::::::::::: ::::::::::::::::::::: 我將每30-360秒發送一次長度爲10-20個字符的字符串 (將由用戶控制)包含地理位置點字符串格式。數據發送的順序並不重要,這就是爲什麼我首先想到了udp。

我已經設置了我的服務器,以便當用戶登錄時,他/她用他/她的當前IP更新我的數據庫。

最好我希望它在全球範圍內工作,但只要它能在同一個國家的移動網絡中工作。

這是關於我能想到的所有相關信息,希望能夠澄清一些事情!加入:::::::::::::::::::::: :::::::::::

+0

如果你準確地解釋了'你將播出什麼',頻率,其他設備的位置等,這將有所幫助。如果你發佈了更多細節,有人可能會提出其他選擇。 – Squonk 2011-12-15 20:05:50

回答

4

由於UDP沒有目標地址,所以NAT不通過UDP,所以在技術上UDP必須發送到全部網絡的子網。當網絡是您的家庭局域網時,這沒什麼大不了的,但是當網絡是您的ISP或大學骨幹網或手機提供商時,UDP可以複製到成千上萬的子網。這是一個數據包風暴,會降低每個人的網絡性能,而且對於特定的應用程序來說這是一個巨大的矯枉過正,因爲你真的只想和少數客戶進行交流。

此問題已經解決了很多次。即時消息客戶端與您的情況類似:想通過防火牆儘可能直接進行P2P消息傳遞。他們是如何做到的呢?最初的NAT穿越/防火牆穿越解決方案是建立一個信息中繼服務器。所有的客戶端都與服務器通信,服務器將消息從一個客戶端回顯給其他客戶。它適用於NAT和防火牆,因爲客戶端啓動了到服務器的傳出連接。

如果客戶端能夠建立點對點連接,則中繼服務器可以給客戶端彼此的IP地址並停止中繼消息。

UPNP是一種協議,它使客戶端能夠請求防火牆爲傳入流量打開端口。 BitTorrent客戶端使用UPNP使客戶端連接P2P進行文件共享。客戶端通過Torrent服務器找到彼此。大多數家庭局域網防火牆路由器現在都支持UPNP,但對於我來說,蜂窩網絡提供商將爲無線連接提供UPNP支持似乎令人懷疑。

另一種(遠程)可能性是多播TCP/IP,但我記得這是針對從服務器流向客戶端的「推送」內容而非客戶端發起的對等端點的真正優化。

最好的辦法是看看那裏的開源IM客戶端,尤其是那些使用Android實現的客戶端,看看他們是如何做IM的。想到這個,我確信還有其他的。您甚至可以使用即時消息系統的消息傳遞API作爲數據傳輸層,並且或多或少地完全避開線級細節。

+0

將考慮到!非常感謝! – Risch 2011-12-15 20:55:24