Aplikacja serwer - wielu klientów. Serwer i klient przesyłają między sobą obiekty. Po stronie klienta odbywa się to w wątku kontrolera sieci. Łączenie i rozłączanie są obsługiwane lokalnie, reszta jest wysyłana przez ObjectOutputStream do serwera. Chciałbym również odbierać dane z serwera za pomocą ObjectInputStream, ale poniższa implementacja nie działa, problemy opisałem niżej.

	@Override
	public void run() 
	{
		while(true)
		{
			//PORT = view.pokerFrame.getClientPanel().getPort();
			//HOST = view.pokerFrame.getClientPanel().getIPAddress();
			try
			{
				ApplicationEvent event = blockingQueue.poll();
				if(event !=null)
				{
					if(event instanceof ConnectEvent)
					{
						client = new Client(HOST, PORT, this);
					}
					else if(event instanceof DisconnectEvent)
					{
						client.getSocket().close();
						view.pokerFrame.getClientPanel().setDisonnectButtonEnabled(false);
						view.pokerFrame.getClientPanel().setConnectButtonEnabled(true);
					}
					else
					{
						client.getOOS().writeObject(event);
					}
				}

				Object object = (Object) client.getOIS().readObject();
				if(object instanceof String)
				{
					String info = (String) object;
					view.pokerFrame.getClientPanel().addMessage(info);
				}
			}
			catch(NullPointerException e) {}
			catch(Exception e)
			{
				e.printStackTrace();
				throw new RuntimeException(e);
			}
			
		}
	}

Problem jest taki, że jeżeli kliknę połącz i zostanie stworzony nowy obiekt klienta to wątek staje. Nie mogę wysyłać żadnych informacji do serwera i tym samym nic odebrać. Jeżeli usunę fragment z czytaniem inputu, z kolejki blokującej będę wyjmował metodą put() to działa, tj łączę się i mogę wysyłać obiekty do serwera. Pytanie czy stworzenie obiektu klient ma jakiś wpływ na wątek - tzn ma, bo wątek staje, ale jaki?

public class Client
{
	//private final int PORT;
	//private final String HOST;
	private Socket socket;
	
	private ObjectInputStream ois;
	private ObjectOutputStream oos;
	
	private final NetworkModel networkModel;
	
	public Client(final String HOST, final int PORT, final NetworkModel networkModel)
	{
		this.networkModel = networkModel;
		try
		{
			socket = new Socket(HOST, PORT);
			oos = new ObjectOutputStream(socket.getOutputStream());
			ois = new ObjectInputStream(socket.getInputStream());
			networkModel.getView().pokerFrame.getClientPanel().addMessage("Poloczono z " + HOST + ":" + PORT);
			networkModel.getView().pokerFrame.getClientPanel().setConnectButtonEnabled(false);
			networkModel.getView().pokerFrame.getClientPanel().setDisonnectButtonEnabled(true);
		}
		catch(Exception e)
		{
			networkModel.getView().pokerFrame.getClientPanel().addMessage("Nie mozna polaczyc z " + HOST + ":" + PORT);
		}
	}
	
	public Socket getSocket()
	{
		return socket;
	}
	
	public ObjectInputStream getOIS()
	{
		return ois;
	}
	
	public ObjectOutputStream getOOS()
	{
		return oos;
	}
}