【问题标题】:Sending message from Android client to Java server从 Android 客户端向 Java 服务器发送消息
【发布时间】:2016-12-18 15:00:10
【问题描述】:

我正在开发一个 Android 应用程序,我需要从应用程序向 Java 服务器发送一条消息。

Java 服务器的工作方式如下:

thread = new Thread(){
            public void run(){

                System.out.println("Server is running...");

                try {
                    ServerSocket socket = new ServerSocket(7000);
                    while(true){
                        Socket s = socket.accept();
                        DataInputStream dis = new DataInputStream(s.getInputStream());
                        System.out.println("Received from client: " + dis.readUTF());
                        dis.close();
                        s.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        };
        thread.start();

在我的应用程序中,我以这种方式发送消息:

mt = new Thread() {
            public void run() {

                try {
                    Socket socket = new Socket("192.168.1.100", 7000);
                    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
                    dos.writeUTF(song_field.getText().toString());
                    dos.flush();
                    dos.close();
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        };
        mt.start();
        Toast.makeText(context, "Your Message is sent. Thank you!", Toast.LENGTH_SHORT).show();

我可以用模拟器和我的手机成功发送消息,因为它们连接到同一个wifi连接,但如果设备没有连接到同一个网络,消息不会发送到服务器。我希望每个人都能够向我的计算机服务器发送消息,无论他们的互联网连接如何。

我该如何解决这个问题?

【问题讨论】:

    标签: android sockets server client


    【解决方案1】:

    一般来说,您需要使用Web Sockets 之类的东西来实现您想要做的事情,通常情况下,客户端/服务器位于不同的网络上。有几种不同的 Web Socket 实现,例如https://medium.com/square-corner-blog/web-sockets-now-shipping-in-okhttp-3-5-463a9eec82d1#.w9hrc1icw

    编辑 我最初误读了问题,并认为您正在尝试将消息从服​​务器异步发送到客户端(这需要 Web Sockets 之类的东西)。如果您只是从客户端向服务器发出请求,那么典型的解决方案是从您的服务器公开 REST API(并使用 Retrofit 之类的东西从客户端发出请求)。

    【讨论】:

    • 我知道先生,好吧,我没有任何服务器或网站。我可以使用 Java 创建自己的服务器,而无需支付任何费用来接收来自我的应用程序的消息吗?
    • 您可以使用 Google App Engine - cloud.google.com/appengine/docs/java
    • 抱歉“接受答案”来晚了。先生,您帮助了我。
    猜你喜欢
    • 2016-07-13
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2017-07-30
    相关资源
    最近更新 更多