2012-08-05 20 views
7

其實iam編碼的android應用程序接收它連接到電腦的攝像頭的圖片。爲了獲得更多的fps,我使用udp協議而不是tcp。這個想法是,電腦將圖片發送到手機的IP和端口。但電話提供商有不同的公共端口。所以我不能直接地址電話。這就是爲什麼我試圖通過udp打孔來解決問題的原因,但那並不奏效。當我的電話向PC發送一個數據包時,PC將獲得電話的公共IP和端口。每秒鐘都會發生,以保持開放。然後服務器以儘可能快的速度將webcame幀發送到此ip和端口。但手機只能在1-2秒內收到10-15張照片。在那之後,提供者似乎會過濾每一個後續數據包或類似的東西,因爲手機不會收到任何進一步的數據包。UDP穿孔不可能與移動提供商

現在我的問題是:發生了什麼事(或提供者在做什麼)以及如何解決這個問題? TCP協議起作用,但由於過多的開銷和錯誤更正,流式傳輸速度太慢。

+0

數據包有多大? – 2012-08-14 20:56:15

+3

他們約20k。但我已經找到了原因:我在太短的時間範圍內發送太多的數據包。它們已經存儲在設備的網絡堆棧的某處,因爲設備無法足夠快地處理它們。現在,我等待每個數據包75毫秒,它就像一個魅力=) – Dano 2012-08-20 10:22:12

+2

@Dano如果您發現解決方案編輯您的答案或回答自己的問題。 PLS。 – 2013-10-29 18:49:49

回答

9

有幾個問題要記住用UDP,其移動網絡上放大:

  • 正如你可能知道,一旦你發送一個UDP數據報,也絕對不能保證它會得到通過並且沒有辦法知道發生了什麼,如果沒有。

  • 大於大約1400字節的有效載荷很可能被分解爲IP分段。接收操作系統可能將重新組裝成一個完整的數據包,但只有在每個片段到達時纔會這樣做。一些路由器會隨意丟棄碎片,一些防火牆會丟棄碎片(如果它們包含特定的字節模式),另一些則會限制碎片可能發送的速率。它最好總是保持你的數據報小,並自己重新組裝和重複缺失的部分。

  • 沒有流量控制:如果任何路由器的緩衝區已滿,則之後的所有內容都將被丟棄。如果某些路由器的緩衝區正在增長但尚未滿滿,則會開始隨機丟棄一定百分比的數據包。如果速度超過某個任意閾值,某些防火牆會將UDP源列入黑名單。

在一般情況下,設備和防火牆製造商往往把UDP像廢話所以作爲UDP開發人員,你必須是一個額外的好公民,以不下去了甩:調節你的流量,請記住,丟棄的數據包意味着你可能速度太快,並保持數據包小。在一個受控的環境中有很多可以避免的情況,但是如果應用程序將「瘋狂」部署,則需要花費大量精心編程來避免問題。