2016-12-18 8 views
-1

Я разрабатываю приложение для Android, и мне нужно отправить сообщение из приложения на сервер Java.Отправка сообщения от клиента Android на сервер Java

Java Server работает следующим образом:

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-соединению, но если устройство не подключено к той же сети, сообщение не отправляется на сервер. Я хочу, чтобы все могли отправлять сообщения на компьютер, независимо от их интернет-соединения.

Как исправить эту проблему?

ответ

0

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

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

+0

Я вижу сэра, ну, у меня нет ни одного сервера или веб-сайта. Могу ли я создать свой собственный сервер с Java, не заплатив денег за получение сообщений из моего приложения. – orkun

+0

Вы можете использовать что-то вроде Google App Engine - https://cloud.google.com/appengine/docs/java/ –

+0

Простите за опоздание «примите ответ». Ты помог мне сэру. – orkun

Смежные вопросы