2015-10-19 104 views
1

我正在嘗試使連接到Android應用程序的Java應用程序。使用主機名無法連接到Android服務器

我的電腦和手機都連接到同一個網絡。

這是Java客戶端至極在我的電腦上運行:

client = new Socket("muffin", port); 

System.out.println("Connected"); 

output = new ObjectOutputStream(client.getOutputStream()); 
output.flush(); 
input = new ObjectInputStream(client.getInputStream()); 

System.out.println("Streams ready"); 

這是Android應用程序至極的作品作爲服務器:

server = new ServerSocket(port); 
socket = server.accept(); 

Log.i("Server", "Connected"); 

output = new ObjectOutputStream(socket.getOutputStream()); 
output.flush(); 
input = new ObjectInputStream(socket.getInputStream()); 

在清單我添加了權限:

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 

正如你可以看到我試圖通過使用它的主機名從我的電腦連接到android服務器(我改變了我的Android主機名「鬆餅」),但它不連接,它拋出一個異常:

java.net.UnknownHostException: muffin 

如果不是我用的是IP地址的主機名,它的工作原理沒有問題。 看上去好像是找不到所謂的「鬆餅」局域網的設備,但是你可以從這個截圖我的調制解調器頁面,名字是正確的,請參閱:

My modem page that shows connected client

這就是說,我tryed使用android應用程序作爲客戶端,而java程序作爲服務器,但它看起來像android有一些問題,因爲它甚至沒有連接到我的電腦,即使使用ip地址而不是主機名。

你對如何解決這個問題有什麼想法嗎?

在此先感謝並對我的英語感到抱歉,這不是我的母語。

回答

1

我解決了這個問題,我不得不通過Windows防火牆允許特定端口上的流量。

現在我可以使用它的主機名連接到android應用程序。

0

你不能做:

new Socket("muffin", port); 

有與主機主機名之間的差別,所以:

java.net.UnknownHostException: muffin 

主機 「鬆餅」 不存在,這是真的:唯一現有的主機是192.168.1.105,他有一個主機名誰是「鬆餅」。

所以,你應該做的:

new Socket("192.168.1.105", port); 

這是不可能得到主機從它的主機名:所以如果是爲你做的唯一途徑,你將不得不做一個全部本地網絡的巨大掃描,然後看看哪個主機已連接有好的主機名。由於這種方法要困難得多,我真的建議你找到另一種方法來做到這一點:)

+0

但很多時候我通過使用我的電腦主機名連接了兩個Java應用程序(在不同的計算機上),它工作正常......我不想使用IP地址,因爲它每次都會改變。 – CtrlAltDel