title: Sending Object over socket results in SocketException
body: <p>How can I stop the SocketException from occurring?</p>
  
  <p>I am trying to do a simple transfer of a serialized object from a client to a server on my local machine. </p>
  
  <p>I have been able to use a slight variation of the following code to send strings, but when I try to send an object</p>
  
  <pre><code>Customer customerToReceive = (Customer) input.readObject();// EXCEPTION OCCURS RIGHT HERE
  </code></pre>
  
  <p>I get a SocketException that I don't understand how to interpret.</p>
  
  <pre><code>java.net.SocketException: Connection reset
  at java.net.SocketInputStream.read(Unknown Source)
  at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source)
  at java.io.ObjectInputStream$BlockDataInputStream.read(Unknown Source)
  at java.io.ObjectInputStream$BlockDataInputStream.readFully(Unknown Source)
  at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
  at java.io.ObjectInputStream.readSerialData(Unknown Source)
  at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
  at java.io.ObjectInputStream.readObject0(Unknown Source)
  at java.io.ObjectInputStream.readObject(Unknown Source)
  at MattServer.runCustomerServer(MattServer.java:44)
  at MattServer.&lt;init&gt;(MattServer.java:14)
  at MattServerTest.main(MattServerTest.java:10)
  </code></pre>
  
  <p>Here is the Client code, which doesn't seem to complain at all:
      public class MattClient
      {
      Socket client;
      ObjectOutputStream output;
      ObjectInputStream input;
      String message;</p>
  
  <pre><code>public MattClient()
  {
      runCustomerClient();
  }
  
  public void runCustomerClient()
  {
      try
      {
          //Connection:
          System.out.println("Attempting connection...");
          client = new Socket("localhost",12345);
          System.out.println("Connected to server...");
  
          //Connect Streams:
  
          //output.flush();
          System.out.println("Got IO Streams...");
  
          //SEND MESSAGES:
          try
          {
              for(int i = 1;i&lt;=10;i++)
              {
                  output = new ObjectOutputStream(client.getOutputStream());
                  Customer customerToSend = new Customer("Matt", "1234 fake street", i);
                  System.out.println("Created customer:");
                  System.out.println(customerToSend.toString());
                  output.writeObject(customerToSend);
                  output.flush();
              };
              message = "TERMINATE";
              System.out.println(message);
              output.writeObject(message);
              output.reset();
              output.flush();
          }
          catch (IOException e)
          {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          catch(Exception e2)
          {
              e2.printStackTrace();
          }
          finally
          {
  
          }
      }
      catch (IOException e1)
      {
          // TODO Auto-generated catch block
          e1.printStackTrace();
      }
      catch(Exception e3)
      {
          e3.printStackTrace();
      }
      finally
      {
  
      }
  }
  </code></pre>
  
  <p>And the server which revolts :</p>
  
  <pre><code>public class MattServer
  {
  ServerSocket server;
  Socket socket;
  ObjectInputStream input;
  ObjectOutputStream output;
  String message;
  
  public MattServer()
  {
      runCustomerServer();
  }
  
  public void runCustomerServer()
  {
      try
      {
          server = new ServerSocket(12345,100000);
          while(true)
          {
              //CONNECTION:
              System.out.println("Waiting for connection");
              socket = server.accept();
              System.out.println("Connection received...");
  
              //CONNECT STREAMS:
              //output = new ObjectOutputStream(socket.getOutputStream());
              //output.flush();
              input = new ObjectInputStream(socket.getInputStream());
              System.out.println("Got IO Streams...");
  
              //PROCESS STREAMS:
              System.out.println("Connection successful!");
              do
              {
                  System.out.println("Started loop");
                  try
                  {
                      System.out.println("in try...");
                      System.out.println(socket.getInetAddress().getHostName());
                      Customer customerToReceive = (Customer) input.readObject();// EXCEPTION OCCURS RIGHT HERE
                      Object o = input.readObject();
                      System.out.println("Object of class " + o.getClass().getName() + " is " + o);
                      System.out.println("Got customer object");
                      System.out.println(customerToReceive.toString());
                  }
                  catch(ClassNotFoundException cnfE)
                  {
                      System.out.println("Can't convert input to string");
                  }
              } while(!message.equals("TERMINATE"));
  
              System.out.println("Finished.");
  
          }
      }
      catch(IOException ioE)
      {
          ioE.printStackTrace();
      }
      finally
      {
          try
          {
              input.close();
              socket.close();
              server.close();
          }
          catch (IOException e)
          {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
  }
  </code></pre>