【问题标题】:Use socket programming for different android device with different network对不同网络的不同android设备使用socket编程
【发布时间】:2016-10-26 19:14:58
【问题描述】:

我正在开发一个套接字应用程序。

背景

  • 有两个安卓设备。
  • 两台设备都在不同的网络上(即一台在移动网络上,另一台在不同的移动网络或 wifi 上)。
  • 应用在同一个 wifi 网络上运行良好。
  • 应用无法在不同的网络上运行。
  • 我读过关于端口转发的文章,但这一切都以路由器端口转发告终,所以这与我的应用程序无关,因为我的应用程序喜欢在不同的网络上工作。

我的尝试:

我使用以下方法获得了服务器 ip 地址,它给了我 ip 地址:

    public 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()) {
                    ip += "Server running at : "
                            + inetAddress.getHostAddress();
                }
            }
        }

    } catch (SocketException e) {

        // TODO Auto-generated catch block
        e.printStackTrace();
        ip += "Something Wrong! " + e.toString() + "\n";
    }
    text.setText(ip);
    return ip;
}

我正在使用静态端口 8080 [可能是这个问题,如果是,请给我一个选项]。

我在客户端使用这条线进行连接,但 soket 对象在不同的​​网络上返回 null:

InetAddress serverAddr = InetAddress.getByName(SERVER_IP);

socket = new Socket(serverAddr, SERVERPORT);

所以,请建议我应该用什么来沟通 具有不同网络的不同真实android设备[应用程序运行在同一个 网络完美]?

【问题讨论】:

  • 灾难之路。您可能总是需要配置路由器才能做到这一点。并且 8080 主要路由到一些 HTTPS 主机。恕我直言,您最好的选择是在公共互联网上拥有一个公共服务器,以便从两个设备连接。
  • @Fidor 谢谢回复 我跟路由器没关系,请给我解释一下普通服务器
  • 手持设备的问题是,您无法知道您在谁的网络中。在您自己的网络中,您可以将路由器配置为将端口路由到您的设备,该设备接受该端口的连接。例如,您不可能配置公共接入点或移动网络来执行此操作。因此,您需要互联网中的公共主机才能从任何地方连接。然后您就可以与该服务器进行双工通信。然后后者必须将消息从一个连接转发到另一个。
  • @Fildor 好的。让我找出在不同设备和不同网络上进行套接字操作的其他选项,因为我已经完成了一半的项目。

标签: java android sockets networking


【解决方案1】:

https://en.wikipedia.org/wiki/TCP_hole_punching

如果您连接到 P2P 连接,则可以使用此技术。

否则,您可以获得一个可供两个客户端访问的在线服务器,它可用于在两者之间转发消息。 Amazon Web Services 是一个不错的选择,您可以使用具有公共 IP 的 T2.mini 机器免费试用一年。

https://aws.amazon.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多