使用主机名无法连接到Android服务器

问题描述:

我正在尝试使连接到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地址而不是主机名。

你对如何解决这个问题有什么想法吗?

在此先感谢并对我的英语感到抱歉,这不是我的母语。

我解决了这个问题,我不得不通过Windows防火墙允许特定端口上的流量。

现在我可以使用它的主机名连接到android应用程序。

你不能做:

new Socket("muffin", port); 

有与主机主机名之间的差别,所以:

java.net.UnknownHostException: muffin 

主机 “松饼” 不存在,这是真的:唯一现有的主机是192.168.1.105,他有一个主机名谁是“松饼”。

所以,你应该做的:

new Socket("192.168.1.105", port); 

这是不可能得到主机从它的主机名:所以如果是为你做的唯一途径,你将不得不做一个全部本地网络的巨大扫描,然后看看哪个主机已连接有好的主机名。由于这种方法要困难得多,我真的建议你找到另一种方法来做到这一点:)

+0

但很多时候我通过使用我的电脑主机名连接了两个Java应用程序(在不同的计算机上),它工作正常......我不想使用IP地址,因为它每次都会改变。 – CtrlAltDel