2011-09-02 116 views
0

我運行一些代碼連接到服務器,發送一個對象然後接收另一個對象。 而在我的Android enulator(V2.2)我得到這個運行 - java.net.SocketException: Socket is closed 到服務器的連接是成功的,我能夠發送的對象,但是當我試圖做socket.getInputStream()它拋出異常嘗試從服務器接收文件時出現異常

這是我的連接器類:

public class ConnectionToServer { 
    UserProblemRequest sentProblem; 
    Problem responseProblem; 
    Socket socket; 

    public ConnectionToServer(){ 
     sentProblem = null; 
     responseProblem = null; 
     socket = null; 
    } 

    public void connect(){ 
     try { 
      Log.d(TAG, "Connecting..."); 
      socket = new Socket(Utils.SERVER_IP, Utils.SERVER_PORT); 
      Log.d(TAG, "SUCCESS: Connected!"); 
     } catch (UnknownHostException e) { 
      Log.d(TAG, "ERROR: Falied to connect! (UnknownHostException)"); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      Log.d(TAG, "ERROR: Falied to connect! (IOException)"); 
      e.printStackTrace(); 
     } 
    } 

    public void setProblemFromByteArray(byte[] data, boolean isFile){ 
     sentProblem = new UserProblemRequest(); 
     sentProblem.fileBArray = data.clone(); 
     if (isFile){ 
      sentProblem.requestType = Utils.requestType_IMAGE; 
     } 
     else { 
      sentProblem.requestType = Utils.RequestType_STRING; 
     } 
    } 

    public void sendProblem(){ 

     ObjectOutputStream os; 

     try { 
      os = new ObjectOutputStream(socket.getOutputStream()); 
      Log.d(TAG, "Sending file to server..."); 
      os.writeObject(sentProblem); 
      os.flush(); 
      os.close(); 
     } catch (IOException e) { 
      Log.d(TAG, "ERROR: Falied to send file to server!"); 
      e.printStackTrace(); 
     } 
     Log.d(TAG, "SUCCESS: File sent to server!"); 
    } 

    public void closeConnection(){ 
     try { 
      socket.close(); 
     } catch (IOException e) { 
      Log.d(TAG, "failed to close socket"); 
      e.printStackTrace(); 
     } 
    } 

    public Problem reciveResponseFromServer(){ 

     ObjectInputStream ois; 

     try { 
      ois = new ObjectInputStream(socket.getInputStream()); 
      responseProblem = (Problem) ois.readObject(); 
     } catch (StreamCorruptedException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
     return responseProblem; 
    } 

} 

,我使用此代碼來運行它:

ConnectionToServer serverConnection = new ConnectionToServer(); 
serverConnection.connect(); 
serverConnection.setProblemFromByteArray(temp_data, true); 
serverConnection.sendProblem(); 
Problem responseProblem = serverConnection.reciveResponseFromServer(); 
serverConnection.closeConnection(); 

什麼想法?

回答

0

在sendProblem()中關閉ObjectOutputStream()是否會關閉底層套接字,以便在reciveResponseFromServer()中的getInputStream()套接字已經關閉時?

+0

我讀了一下,是的!如果你關閉了outputStream,那麼socket就關閉了。 – levtatarov

相關問題