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

Can't connect to Android server using hostname

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

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

这是在我的电脑上运行的 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 主机名更改为 "muffin"),但是它未连接并抛出异常:

java.net.UnknownHostException: muffin

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

就是说,我尝试将 android 应用程序用作客户端,将 java 程序用作服务器,但看起来 android 有一些问题,因为它没有即使使用 IP 地址而不是主机名也无法连接到我的电脑。

你知道如何解决这个问题吗?

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

你不能这样做:

new Socket("muffin", port);

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

java.net.UnknownHostException: muffin

表示 host "muffin" 不存在,这是真的:唯一存在的主机是 192.168.1.105,它有一个 主机名 谁是 "muffin".

所以你应该这样做:

new Socket("192.168.1.105", port);

无法从 hostname 获得 host :所以如果这是您唯一的方法,您将不得不对所有本地网络进行大规模扫描,然后查看连接的哪个 host 具有正确的 hostname。由于这种方法要难得多,我真的建议你找到另一种方法来做:)

我解决了问题,我必须允许特定端口上的流量通过 windows 防火墙。

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