2011-09-02 12 views
0

서버에 연결하기위한 코드를 실행하고 Object를 보낸 다음 다른 Object를 수신합니다. 내 안드로이드 enulator (버전 2.2) 내가 얻을에서이 작업을 실행하는 동안 - java.net.SocketException: Socket is closed 서버에 대한 연결이 성공하고 내가 그것을 예외를 throw 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을 닫으면 소켓이 닫힙니다. – levtatarov

관련 문제