【问题标题】:Java Client-Server Application only works at local network [closed]Java客户端-服务器应用程序仅适用于本地网络[关闭]
【发布时间】:2015-07-27 23:47:21
【问题描述】:

我制作了一个简单的 java 客户端-服务器应用程序,其中客户端 (android mobile) 向服务器 (pc) 发送消息,但是它们都连接到同一个网络。如何通过互联网而不是 localhost 提供相同的服务?例如,在我的手机上使用 3G。 我也尝试使用我的公共 IP,但它没有用。 我的服务器就是这样的:

    import java.io.*;
    import java.net.*;
    import java.util.Scanner;

    public class PCServer {

        public static void main(String[] args) throws IOException {

        ServerSocket server = new ServerSocket(5000);

        Socket client = server.accept();
        Scanner s = new Scanner(client.getInputStream());
        while (s.hasNextLine()) {
            System.out.println(s.nextLine());
        }

        s.close();
        server.close();
        client.close();     
        }
    }

【问题讨论】:

  • 有很多服务可以为您托管您的应用程序。
  • 长话短说,问题是由于路由器/防火墙设置,您的服务器在本地网络之外的网络中不可见。您可以配置您的设置、获取静态 IP 和获取 DNS(如果您想使用域名)以使您的服务器正常工作,但这对初学者来说很麻烦。 Amazon AWS 和 Heroku 提供易于使用的云服务,因此您不必担心这些配置和安全问题。

标签: java android localhost


【解决方案1】:

要从网络外部访问您的本地主机,您只需做几件事

  1. 在防火墙中:允许您的服务器侦听的端口上的传入连接。
  2. 在您的本地路由器中:将所有到所需端口的入站连接转发到具有相同端口的本地计算机的 IP。
  3. 在客户端应用程序中将 localhost 替换为您的公共 IP。

注意:要使此解决方案可用,您应该有一个静态 IP,以便您可以依赖它并在您的客户端应用程序中使用它。

【讨论】:

    【解决方案2】:

    当您说您的 公共 IP 时,我认为您的意思是当您访问像 What is my ip 这样的网站时,您的桌面浏览器表示的公共 IP

    这与 Java 或 Android 无关。

    • 您的 ISP 不会为您的 PC(甚至您的路由器)提供公共 IP。即使有,也将是NATed
    • 如果您希望能够做到这一点,那么您需要联系您的 ISP 以获取公共 IP 地址。通常它是静态的,但并非总是如此,您可能需要特别提出要求。
    • 然后您必须配置自己的设备来处理和路由 向您的 PC 公开请求。

    或者,您可以使用 Heroku 并称其为好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-30
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多