【发布时间】:2014-12-13 22:29:38
【问题描述】:
我编写了一个充当 websocket 服务器的应用程序(使用 TooTallNate 库),以及一些充当 websocket 客户端的 javascript。我设法从浏览器访问连接的 android 设备的号码和联系人组,并且可以通过在计算机上键入它们来编写短信。问题是到目前为止我需要将android设备的ip硬编码到客户端的javascript中。
这就是我将 Web 客户端连接到 android 服务器的方式。
var ws = new WebSocket("ws://192.xxx.x.xx:8080/");
我希望用户可以输入网络客户端的链接,然后在不知道它的 ip 的情况下连接到 android 设备。
如何以编程方式检索服务器的 ip?
编辑:
到目前为止,对于 android 套接字服务器,我使用的是此方法返回的 ip
private String getIpAddress() {
String ip = "";
try {
Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
.getNetworkInterfaces();
while (enumNetworkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = enumNetworkInterfaces
.nextElement();
Enumeration<InetAddress> enumInetAddress = networkInterface
.getInetAddresses();
while (enumInetAddress.hasMoreElements()) {
InetAddress inetAddress = enumInetAddress.nextElement();
if (inetAddress.isSiteLocalAddress()) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException e) {
Log.e(TAG, e.getMessage(), e);
}
return ip;
}
然后我像这样启动服务器
final String host = getIpAddress();
final int port = 8080;
new Thread(new Runnable() {
@Override
public void run() {
SimpleServer server = new SimpleServer(MainActivity.this, new InetSocketAddress(host, port));
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
info.setText("I'm waiting here: "
+ port);
}
});
server.run();
}
}).start();
当我使用 javascript 客户端打开浏览器时,我使用的 ip 与上面的 java 方法返回的相同。
【问题讨论】:
-
您只是想从浏览器连接到您自己设备上的套接字服务器吗?如果是这样,您可以使用
127.0.0.1或localhost来表示您当前正在运行的计算机。 -
我刚刚编辑了我的问题。当我用 localhost 替换我现在使用的 ip 时,它不起作用。
-
但是是的,我尝试从浏览器连接到我自己的手机,它在同一个 wifi 网络中。
-
我不知道 localHost 在 Android 设备上工作的事实。您是否也尝试过 127.0.0.1?你有一个实际的 webSocket 服务器来监听 webSocket 协议连接吗?
-
127.0.0.1 也不起作用。我在服务器上没有任何用于 Web 套接字连接的侦听器。问题是我无法自动连接,因为我不知道 ip,所以我也无法监听任何连接。
标签: android websocket java-websocket