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();
			}
		}
		
	}
}