2013-03-20 6 views
0

Я пытаюсь создать простое приложение с клиентом android и java-сервером Андроид-клиент может отправлять сообщения серверу (java) , а когда я пытаюсь прочитать ответ сервера Ошибка: сокет закрыт. линия (если ((receiveMessage = receiveRead.readLine())! = NULL))Android: socket communication

public class ClientConnectorTask extends AsyncTask<String, Void, Integer> { 
    private Socket client; 
    private PrintWriter printwriter; 
    protected Integer doInBackground(String...strings) { 
     // validate input parameters 
     if (strings.length <= 0) { 
      return 0; 
     } 
     // connect to the server and send the message 
     try { 
      client = new Socket("192.168.1.4", 7777); 
      printwriter = new PrintWriter(client.getOutputStream(),true); 

      //while(true){ 
      InputStream istream = client.getInputStream(); 
      BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream)); 

      String receiveMessage; 
      while (true){ 
      // printwriter.write(strings[0]); 
       printwriter.print(strings[0]); 
       printwriter.flush(); 
       printwriter.close(); 
       if((receiveMessage = receiveRead.readLine()) != null) //receive from server 
       { 
        System.out.println(receiveMessage); // displaying at DOS prompt 
       } 
      } 
      //} 

      //client.close(); 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return 0; 
    } 
    protected void onPostExecute(Long result) { 
     return; 
    } 
} 
+0

Я не уверен в этом, вот почему это комментарий. Я считаю, что это '' printwriter.close(); '' может закрывать сокет. Однако, как я уже сказал, я не уверен. Если вы удалите его, он все равно выбросит ошибку? Кроме того, вы уверены, что не закрываете его на стороне сервера? – Fred

+0

Спасибо, что на стороне сервера reply.in я не закрываю. если я не сделаю это, то данные не дойдут до сервера –

ответ

0

Закрытие PrintWriter внутри цикла не имеет смысла, и закрыть его до readLine() вызова не имеет смысла или. Закрытие либо входного, либо выходного потока Socket закрывает другой поток и сокет.

+0

Спасибо за ответ, проверите это –