2015-03-13 2 views
0

У меня есть приложение для Android, которое подключается к моему Linux-серверу (у которого есть прослушиватель портов Java), и когда я отправляю команду (например, «uname»), она выплевывает " linux "на стороне терминала (что является преднамеренным, так как его просто temp., чтобы убедиться, что он читается), и когда я отправлю его обратно (при условии, что он это делает), андроид не получает его, или java никогда не отправляет его для начала, здесь является клиентской стороной (android) кода связи.Android не получает ответ от java-сервера

public void onClick(View v) { 
     try{ 
      OutputStream outStream = socket.getOutputStream(); 
      String message = "uname"; 
      outStream.write(message.getBytes()); 
      while(true){ 
       DataInputStream dis = new DataInputStream(socket.getInputStream()); 
       byte[] disbyte = new byte[1024]; 
       dis.read(disbyte); 
       String disString = new String(disbyte); 

       //temporarily text place holder when server sends output back. 
       serveresponse.setText(disString); 
      } 


     }catch(Exception e){ 

     } 
    } 

Вот на стороне сервера (Java на Linux машине) код связи

try { 
      ServerSocket serverSocket = new ServerSocket(PORT); 
      System.out.println("Listening on Port: "+PORT); 
      Socket clientSocket = serverSocket.accept(); 
      System.out.println("New Client has connected"); 
      while(listening){ 
       DataInputStream input = new DataInputStream(clientSocket.getInputStream()); 
       byte[] bread = new byte[1024]; 
       input.read(bread); 
       String instring = new String(bread); 

       try { 
        shellprocess = Runtime.getRuntime().exec(instring); 
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(shellprocess.getInputStream())); 
        String s = null; 
        while((s = stdInput.readLine()) != null){ 
         OutputStream outStream = clientSocket.getOutputStream(); 
         outStream.write(s.getBytes()); 
         outStream.flush(); 

         //this line is to see if the output is correct in the terminal, just here temporarily 
         System.out.println(s); 
        } 

       }catch(Exception e){ 

       } 

      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

Мой вопрос, как я могу отправить ответ обратно (выход из команды оболочки) для андроида клиента?

+0

Вы отлаживали его? Просто потому, что мне любопытно, почему вы используете Sockets, а не libs, которые абстрагируют это? http://www.javaworld.com/article/2077322/core-java/core-java-sockets-programming-in-java-a-tutorial.html – simonides

+0

Извините за поздний ответ в конце дня на работе и в пятницу. Я использовал сокеты, потому что я думал, что он должен использовать сокеты. – andyADD

+0

Вы решили проблему? Ну, если вы хотите узнать о том, как их использовать, да, это хороший момент для начала, но если вы хотите быстро разработать приложение для поиска libs, которые помогут вам в этом, потому что есть так много вещей, которые вам нужно будет заботиться из. Для Android вы можете взглянуть на шаблон OKHttp или Spring Rest. На серверной весне данные могут быть хорошим выбором для эффективной работы службы. – simonides

ответ

0

Функция, связывающаяся с сервером, должна быть нажата в класс Thread или AsyncTask.

+0

С сервера или на Android? – andyADD

+0

На Android. вы можете обратиться по адресу http://programmerguru.com/android-tutorial/android-asynctask-example/ – Dutn

+0

Вы думаете, что именно поэтому он не обновляет ui? Возможно, сделайте это в фоновом режиме, и когда он получит его, положите его на post execute? – andyADD

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