2013-11-24 111 views
1

在我的應用程序中,我需要將幾個(客戶端)設備連接到一個(服務器)設備。我需要它在局域網中工作,所以沒有遠程服務器。 的要求是:在局域網中發送數據和命令從設備到設備

必須具備:

  • 能力爲客戶找到一個發現服務器(沒有手動IP輸入)
  • 能力的服務器知道哪些客戶端連接
  • 將大量數據(圖片等)從服務器發送到客戶端的能力
  • 從服務器向客戶端發送命令(以字符串或json形式)和反之亦然的能力

應具備:

  • 到大集從客戶端的數據(圖片等)發送到服務器
  • 將所有數據加密能力的能力,並用短密碼

命令我googlefu在這個搜索中沒有幫助我,我缺乏很好的搜索條件。 我在問的不是一些代碼,我要求提供一些關於使用哪種技術的建議,以及在Android中是否可行。一些好的文章或教程是非常受歡迎的。

+1

Android提供了基本的非特權unix樣式套接字網絡,因此這適用於Android客戶端和任何服務器操作系統。實際上,您需要使用WiFi網絡(這可能會對電池造成一定的影響),就好像您要使用客戶端的移動網絡連接一樣,您需要在外部Internet上使您的服務器可見。假設wifi可以通過在由DHCP指定的計算機上運行服務器作爲網關(即使拒絕將流量路由到外部)或通過運行本地DNS來簡化發現過程。但是有Android的發現協議實現。 –

回答

2

我會建議使用客戶端服務器套接字實現。您可以執行an IP broadcast並讓您的服務器響應特定的客戶端。一旦做出初步迴應,您可以按照喜歡的方式傳輸數據。

它基本上可以歸結爲:

  • 客戶端創建連接到廣播IP預設的端口上的套接字,並監聽傳入連接
  • 服務器在該端口上偵聽和響應任何傳入連接
  • 客戶端收到服務器的響應並回復有關其客戶身份的詳細信息
  • 任何其他數據通過現在建立的套接字連接發送

請記住,通過使用套接字,您正在使用裸IP數據報,並僅使用原始二進制數據提供其主體。這意味着您將不得不手動編寫協議以應對請求和響應類型,丟棄的數據包和IP的任何其他限制。你可能想要尋找TCP實現層或者爲了你的目的更復雜的東西。

+0

這可能會採用UDP流量而不是原始IP數據包的形式,尤其是當後者可能存在許可問題時。 –

+0

是的,我糾正了。 Java [套接字](http://developer.android.com/reference/java/net/Socket.html)使用TCP,而[DatagramSockets](http://developer.android.com/reference/java/net/DatagramSocket .html)是UDP。 –

+0

非常重要的是,正如Chris指出的那樣,這隻會在Wi-Fi連接上起作用! –

相關問題