11

I am sending Object for client to server modifying that object at server side and resending it to client. Sending object form client to server is fine its working properly but when I am sending object back it gives exception Socket is closed. Here is code. IntString and ParentObj are classes of which I'm sending objects.

Client1 class:

import java.net.*;
import java.io.*;

public class Client1 {
    public static void main(String args[]) {
        int arr[] = new int[10];
        int length = 6, i, counter_1;
        ParentObj obj1;
        for (i = 0; i < length; i++) {
            arr[i] = i + 10;
        }
        try {
            Socket s = new Socket("localhost", 6789);
            IntString obj = new IntString(arr, length);
            /*
             * OutputStream os = s.getOutputStream(); 
             * ObjectOutputStream oos = new ObjectOutputStream(os);
             * 
             * oos.writeObject(obj); 
             * oos.close(); 
             * os.close();
             */
            Send_recv snd = new Send_recv(s);
            snd.sendObj((ParentObj) obj);

            if (s.isClosed()) {
                System.out.println("Closed");
                // s.connect(null);
            }
            obj1 = snd.recObj();
            obj = (IntString) obj1;
            if (obj != null) {
                for (counter_1 = 0; counter_1 < obj.length_of_row; counter_1++) {
                    System.out.println(obj.row[counter_1]);
                    obj.row[counter_1]++;
                }
            }

            // s.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

Server Class

import java.net.*;
import java.io.*;

public class Server1 {
    public static void main(String args[]) {
        IntString obj;
        ParentObj obj1;
        int port = 6789, counter_1;
        try {
            ServerSocket ss = new ServerSocket(port);
            Socket s = ss.accept();
            Send_recv rev = new Send_recv(s);
            /*
             * InputStream is = s.getInputStream(); 
             * ObjectInputStream ois = new ObjectInputStream(is); 
             * IntString obj = (IntString)ois.readObject();
             */
            obj1 = rev.recObj();
            obj = (IntString) obj1;
            System.out.println(s.getInetAddress());
            System.out.println(s.getLocalAddress());
            if (obj != null) {
                for (counter_1 = 0; counter_1 < obj.length_of_row; counter_1++) {
                    System.out.println(obj.row[counter_1]);
                    obj.row[counter_1]++;
                }
            }
            if (ss.isClosed()) {
                System.out.println("Closed ss");

            }
            if (s.isClosed()) {
                System.out.println("Closed in Server");

            }
            Send_recv snd = new Send_recv(s);
            snd.sendObj((ParentObj) obj);

        } catch (Exception e) {
            System.out.println(e + "In Server");
        }

    }
}

Send_recv class for sending and receiving objects.

import java.io.*;
import java.net.*;

public class Send_recv {
    Socket s;
    IntString obj1;

    public Send_recv(Socket s) {
        this.s = s;
    }

    public void sendObj(ParentObj obj) {
        try {
            OutputStream os = s.getOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(os);
            oos.writeObject(obj);
            oos.close();
            os.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public ParentObj recObj() {

        try {
            InputStream is = s.getInputStream();
            ObjectInputStream ois = new ObjectInputStream(is);
            obj1 = (IntString) ois.readObject();
            ois.close();
            is.close();

        } catch (Exception e) {
            System.out.println(e);
        }
        return (obj1);
    }
}

1 Answer 1

34
java.net.SocketException socket is closed

This exception means that you closed the socket, and then continued to try to use it.

os.close();

And you closed it here. Closing either the input or the output stream of a Socket closes the other stream and the Socket.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.