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

时间:2015-10-19 20:53:14

标签: java android sockets serversocket

我正在尝试创建一个连接到Android应用程序的Java应用程序。

我的电脑和手机都连接到同一个网络。

这是我的电脑上运行的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主机名更改为&#34;松饼&#34;),但它没有连接并抛出异常:

java.net.UnknownHostException: muffin

如果使用ip地址而不是主机名,它可以正常工作。 它看起来无法在局域网上找到名为&#34; muffin&#34;的设备,但是您可以从我的调制解调器页面的屏幕截图中看到该名称是正确的:

My modem page that shows connected client

那说,我试图使用android应用程序作为客户端和java程序作为服务器,但它看起来像android有一些问题,因为即使使用IP地址它也没有连接到我的电脑主机名。

您对如何解决此问题有任何想法吗?

提前致谢并抱歉我的英语,这不是我的母语。

2 个答案:

答案 0 :(得分:1)

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

现在我可以使用其主机名连接到Android应用程序。

答案 1 :(得分:0)

你无法做到:

new Socket("muffin", port);

Hostname和Host之间存在差异,因此:

java.net.UnknownHostException: muffin

表示主机&#34;松饼&#34;不存在,这是真的:唯一现有的主机是192.168.1.105,谁有主机名谁是&#34;松饼&#34;。

所以你应该这样做:

new Socket("192.168.1.105", port);

无法从主机名中获取主机:所以如果这是您执行该操作的唯一方法,则必须对所有本地网络进行大量扫描,然后查看连接的主机具有良好的主机名。由于这种方法要困难得多,我真的建议你找另一种方法:)