Отправка сообщения от клиента Android на сервер Java

Я разрабатываю приложение для 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();

Я могу успешно отправить сообщение с помощью эмулятора и моего телефона, поскольку они подключены к одному и тому же Wi-Fi-соединению, но если устройство не подключено к одной и той же сети, сообщение не отправляется на сервер. Я хочу, чтобы все могли отправлять сообщения на сервер моего компьютера независимо от их подключения к Интернету.

Как я могу решить эту проблему?


person orkun    schedule 18.12.2016    source источник


Ответы (1)


В общем, вам нужно будет использовать что-то вроде Web Sockets, чтобы добиться того, что вы пытаетесь сделать, когда, как это обычно бывает, клиент/сервер находятся в разных сетях. Существует несколько различных реализаций веб-сокетов, например. https://medium.com/square-corner-blog/web-sockets-now-shipping-in-okhttp-3-5-463a9eec82d1#.w9hrc1icw

EDIT Сначала я неправильно понял вопрос и подумал, что вы пытаетесь асинхронно отправить сообщение с сервера клиенту (для чего потребуется что-то вроде веб-сокетов). Если вы просто отправляете запросы от клиента к серверу, то типичным решением будет предоставление REST API с вашего сервера (и использование чего-то вроде Retrofit для отправки запросов от клиента).

person John O'Reilly    schedule 18.12.2016
comment
Понятно, сэр. У меня нет ни сервера, ни веб-сайта. Могу ли я создать свой собственный сервер с Java, не платя денег за получение сообщений от моего приложения. - person orkun; 18.12.2016
comment
Вы можете использовать что-то вроде Google App Engine — cloud.google.com/appengine/docs/java< /а> - person John O'Reilly; 18.12.2016
comment
Извините за поздний ответ. Вы помогли мне, сэр. - person orkun; 23.12.2016