2012-09-20 87 views
1

我想知道中央服務器如何在連接兩個設備。我假設當設備應用程序啓動時,它應該向服務器註冊其IP地址和其他相關信息(用戶名)。當它想連接到另一個設備時,它應該查找服務器上的另一個設備的地址,也許有一個獲取請求。然後設置一個連接到一個套接字。如果設備應用程序關閉,它應該從服務器取消註冊。它是否正確?如何將兩臺android設備連接到中央服務器?

回答

1

這非常正確。因爲一個或兩個設備可能位於防火牆(包括NAT)的後面,所以你必須假定他們實際上不能直接相互連接,所以它不會像打開一個套接字那樣簡單其他設備一旦找到其註冊地址。您將不得不嘗試防火牆穿越技術(通常使用UDP成功,但不使用TCP),或者有一個不在防火牆後面的幫助器(可能與註冊服務器或其他類似)攜帶所有希望通信的設備之間的數據。

此外,您將希望讓註冊服務器超時註冊,並且客戶端會定期刷新它們,因爲客戶端在終止或失去對網絡的訪問時並不總是有機會在服務器上註銷自己。

+0

假設我做了你的解釋,我將如何讓中央服務器轉發任何傳遞給其他設備的內容?在我的示例中,設備1從中央服務器獲取設備2的IP,通過套接字連接到設備2,並將tcp視頻,音頻,文件等流式傳輸到它。如果它將服務器用作中介,那麼它需要多長時間輪詢它以獲取新的,例如,視頻幀? –

+1

如果端點之間的直接通信沒有被使用,那麼服務器可以通過天真地'write()'向一個客戶端拷貝或者一切從另一個客戶端'read()'轉發流量,反之亦然。關於如何控制流速的第二個問題,這取決於您的協議以及您是使用TCP還是UDP。如果它的實時內容比流式傳輸速率幾乎預先確定。如果您使用的是TCP,TCP會爲您執行流量控制。如果您將UDP用於非實時內容,那麼您需要自行實施,並且必須以艱難的方式實施流量控制機制。 – Celada

相關問題