исключение при попытке получить файл с сервера - PullRequest
0 голосов
/ 02 сентября 2011

Я запускаю некоторый код для подключения к серверу, отправляю ему объект, а затем получаю другой объект.при запуске этого на моем Android-эмуляторе (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();

есть идеи?

1 Ответ

0 голосов
/ 02 сентября 2011

Завершает ли закрытие ObjectOutputStream () в sendProblem () закрытие нижележащего сокета, чтобы при получении getInputStream () в reciveResponseFromServer () сокет уже был закрыт?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...