使用主机名无法连接到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地址的主机名,它的工作原理没有问题。 看上去好像是找不到所谓的“松饼”局域网的设备,但是你可以从这个截图我的调制解调器页面,名字是正确的,请参阅:
这就是说,我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);
这是不可能得到主机从它的主机名:所以如果是为你做的唯一途径,你将不得不做一个全部本地网络的巨大扫描,然后看看哪个主机已连接有好的主机名。由于这种方法要困难得多,我真的建议你找到另一种方法来做到这一点:)
但很多时候我通过使用我的电脑主机名连接了两个Java应用程序(在不同的计算机上),它工作正常......我不想使用IP地址,因为它每次都会改变。 – CtrlAltDel