2013-10-06 50 views
2

我正在製作一個需要與另一個設備上的另一個應用程序通信的應用程序。唯一的問題是來自設備的IP地址並不總是相同的。我希望客戶端在特定端口上找到服務器,但是如何才能在網絡上找到打開此端口的設備,而無需在客戶端輸入服務器的IP?我發現了Android的NsdManager,但是它可以在API級別16以及之上運行。我正在開發10級。在WiFi網絡上找到另一個Android設備

在此先感謝!

回答

1

我對沒有迴應表示歉意。

我通過向所有設備(255.255.255.255)廣播UDP數據包解決了這個問題。監聽指定端口的Al設備將響應,客戶端現在將知道服務器的IP地址。 TCP用於進一步的通信。

0

這應該不會太難。

在考慮中的專用IP地址的形式應爲192.168.1.x的(X 1和255之間)

,通常,相信號被順序地分配,所以首先我會檢查是否

192.168.1.1如果沒有那一個, 那麼我會檢查

192.168.1.2然後

192.168.1.3然後

etc.

+0

那麼這就是我一開始以爲,但你必須記住不同的子網。考慮到這一點,檢查端口需要很長的時間,由於超時,通常需要幾秒鐘的時間。我剛剛在我的電腦上編寫了一個程序,它可以用本地IP和子網計算可能的IP地址,並且這已經爲我的電腦花了很長的時間。 我想知道,沒有使用蠻力的選項嗎? –

+1

由於問題已經得到解答,所以不要迂腐,但是你忽略了172.16.0.0/12和10.0.0.0/8範圍,對它們進行測試可能不是最好的方案。 – Pedantic

+0

@Pedantic,我很欣賞這個更正。我沒有意識到其他範圍也可以用於此目的。我會稍微刪除這個答案。謝謝。 –

0

廣播工作在大多數情況下,下面的鏈接顯示瞭如何從代碼做到這一點: [Send Broadcast UDP but not receive it on other Android devices

但也有例外:

有些手機不recevie廣播包correcttly(HTC例如),我通過從HTC手機廣播解決了這個問題,並且一旦其他手機接收到該包,則向HTC手機發送udp包(不通過廣播)

如果其中一個設備充當熱點,根本無法工作,在這種情況下,其他devcie可以嘗試使用網關IP(這是熱點設備的IP)

相關問題