Witam, pisze grę która ma w założeniu działać po sieci. Jest to mój pierwszy taki projekt wobec tego moja wiedz na ten temat nie jest jeszcze zbyt szeroka. Serwer i klient, których napisałem są "przeróbkami" odpowiedników wysyłających tekst. Dla stringów program dział. W zwiazku z tym przerobiłem na obiekty i tu pojawił sie problem. Program wysyła obietk (User - dane o uzytkowniku) do serwera. Serwer zaś wysyła również obiekt klasy User z tym, że zawarte są w nim informacje o graczu-komputerze. Niżej zamieszczam treść błędu i 3 klasy.

 java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.writeByte(Unknown Source)
at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at SendThread.run(SendThread.java:37)

Błąd powtarza się dopóki nie zatrzyam programu, czyli wygląda, że pętla się wykonuje. Lecz wnioskuje że problem jest z serializacją.
Klasa test - Uruchamia Serwer

public class Test implements Serializable {

    public static void main(String[] args) {
        Pack talia;
        int j;
        Socket socket = null;
        ServerSocket server = null;
        User user = new User();
        User comp = new User();

        /*****************************************************************
        ********************      Nowe rozdanie     **********************
        ******************************************************************
        *      Losujemy dwie karty ale drukujemy jedną potem krupier     *
        * odkrywamy dwie                                                 * 
        *****************************************************************/
        talia = new Pack();
        comp.setName("Wojtek");
        comp.twoCards(talia);
        comp.checkPoints(comp);

    try {
        server = new ServerSocket(8502);

    socket = server.accept();
    System.out.println("Server has connected!\n");

     ObjectOutputStream out = null;

            out = new ObjectOutputStream(socket.getOutputStream());

      ObjectInputStream in = null;
      in = new ObjectInputStream(socket.getInputStream());
      boolean done = false;
      Thread send = new SendThread(out,in,comp, socket);

      //cos tutaj nie tak
     send.start();

      while(!done)
      {
         user = (User) in.readObject();
         System.out.println("Użytkownik: "+ user.getName() + " ma: " + user.getPoints() + " punktów.");                  

         if (user.isOnTurn())
         {
             done = true;
         }           
      }
      out.close();
      in.close();
      socket.close();
      server.close();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            System.out.println("Nie znaleziono obiektu");
            e.printStackTrace();
        }
    }

}

Klasa wątku odpowiedzialna za wysyłanie w serwerze

import java.io.BufferedReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class SendThread extends Thread 
{
    ObjectInputStream in;
    ObjectOutputStream out;
    boolean done = false;
    User user = null;

    SendThread(ObjectOutputStream out, ObjectInputStream in, User user, Socket socket){
        this.in = in;
        try {

            this.out = new ObjectOutputStream(socket.getOutputStream());
            this.out.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //this.out = out;
        this.user = user;
    }

    public void run() 
    {
          while(user.isOnTurn())
          {
              try 
              {
                  System.out.println(user.getName());
                    out.writeObject(user); 
                  } catch (IOException e) 
                    {
                        System.out.println("Bład w wysyłaniu");
                        e.printStackTrace();
                    } 
              }
    }

}

Klasa klienta


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

class Client{
    public static void main(String[] args){
        String server = "localhost";
        int port = 8502;
        Socket socket = null;
        boolean done = false;
        User user = null;

        user = new User(0, false, "Krzysiek");
        user.twoCards(new Pack());
        user.checkPoints(user);     
    try{
            socket = new Socket(server,port);
            ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
            ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
            while (!done)
            {
                out.writeObject(user);
                try {
                    user = (User) in.readObject();
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("Odebrałem: " + user.getName() + " : "+ user.getPoints());

                if (!user.isOnTurn()){
                     done = true;
                 }
            }
            socket.close();

        }
        catch(UnknownHostException e){
        System.out.println(e);
            System.out.println(
                    "Błąd połączenia");
        }
        catch(IOException e){
            System.out.println(e);
        }

        finally {
            try {
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}