【问题标题】:retrieving the ip of an android websocket server from a javascript client从 javascript 客户端检索 android websocket 服务器的 ip
【发布时间】: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.1localhost 来表示您当前正在运行的计算机。
  • 我刚刚编辑了我的问题。当我用 localhost 替换我现在使用的 ip 时,它不起作用。
  • 但是是的,我尝试从浏览器连接到我自己的手机,它在同一个 wifi 网络中。
  • 我不知道 localHost 在 Android 设备上工作的事实。您是否也尝试过 127.0.0.1?你有一个实际的 webSocket 服务器来监听 webSocket 协议连接吗?
  • 127.0.0.1 也不起作用。我在服务器上没有任何用于 Web 套接字连接的侦听器。问题是我无法自动连接,因为我不知道 ip,所以我也无法监听任何连接。

标签: android websocket java-websocket


【解决方案1】:

那么,带有 HTML 和 JS 的 http 服务器在哪里呢?还是只是您计算机上的 HTML 页面?

  • 如果是安卓手机,可以使用window.location获取服务器IP,放入new WebSocket();函数
  • 如果它在另一个服务器上,你可以在那个服务器上写一些应用程序来接收你的Android应用程序的报告来存储IP,然后把它放到你的JS中。您可以使用一些 Apache 和 Java 应用程序在您的计算机上实现它

【讨论】:

  • 我可以知道socket如何使用window.location找到特定的移动设备
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
相关资源
最近更新 更多