尝试从服务器接收文件时出现异常

时间:2011-09-02 12:59:55

标签: android sockets exception

我运行一些代码连接到服务器,发送一个Object然后接收另一个Object。 在我的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();

任何想法?

1 个答案:

答案 0 :(得分:0)

关闭sendProblem()中的ObjectOutputStream()是否会关闭底层套接字,以便在reciveResponseFromServer()中getInputStream()时套接字已经关闭?