繁体   English   中英

服务器Java应用程序不适用于本地连接

[英]Server java app not working on a local connection

大家好,家里有一个运行服务器Java应用程序的树莓派pi,它与配置了动态DNS并打开了输入/输出通信端口的路由器连接。 当我运行android apication客户端througt 4g时,一切都工作成功。 但是,当我在运行服务器的本地网络上运行连接到wifi的同一应用程序时,服务器应用程序看起来像死机了。 有任何想法吗?

谢谢。

路由器配置

我认为问题与您的DNS有关。 如果使用wifi连接,则必须返回本地IP地址。 您是否有机会将路由器配置为为wifi客户端返回树莓派本地IP地址? 在这里看看: 链接

一个简单的解决方案,即使它不是很好,也可以在代码中添加以下条件:

  • 如果连接到Dyn DNS时出错,请尝试连接到本地IP地址。 (如果您在Wifi局域网中)
  • 如果本地IP地址失败,请重试您的Dyn DNS(以防该用户是真正的用户,并且确实存在通信问题)

(重复直到连接成功)

您还可以标识您的测试设备(使用Settings.Secure.ANDROID_ID或IMEI),并仅将本地IP用于它们。 另一个选择是使URL可配置(例如,带有隐藏选项)。

由于我的应用程序可以在本地运行,因此只需要连接到服务器即可进行更新。 如果来自客户端和服务器的IP相等,我将阻止服务器应用程序上的连接。

目前,这是保持服务器应用正常运行的最佳解决方案。

 URL whatismyip = new URL("http://checkip.amazonaws.com");
 BufferedReader in = new BufferedReader(new 
 InputStreamReader(whatismyip.openStream()));


 String ip = in.readLine(); 


    try {


        SSLServerSocketFactory sslFactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
        SSLServerSocket ss = (SSLServerSocket) sslFactory.createServerSocket(PORT);


        int idSession = 0; 
        while (true) {

            SSLSocket socket = (SSLSocket)ss.accept();



            if(socket.getInetAddress().getHostAddress().equals(ip)){
                if (socket != null && !socket.isClosed()) {

            socket.close();
        }
            }

            ((ServidorThread) new ServidorThread(socket, idSession)).start();
            idSession++;

        }
    } catch (IOException ex) {
        ex.printStackTrace(System.out);
        Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM