Witam

Piszę wielowątkowy serwer i mam problem ze strumieniami. Generalnie komunikacja z klientami polega na tym że klient po połączeniu się z serwerem otrzymuje odpowiedni string, po czym odsyła serwerowi inny string (coś na wzór komunikatora). Jednak mam problem z ciągłym zamykaniem się socketu przy połączeniu się klienta do serwera.

Część kodu serwera:

 class PolaczeniaSerwera extends Thread
{
	Socket przychodzacy;
	int numerPolaczenia;
	
	public ObslugaPolaczen(Socket i, int nr)
	{
		przychodzacy=i;
		numerPolaczenia=nr;
	}
	
	public void run()
	{
		String tekst="przykladowy test";
		PrintWriter  zapis=null;
		
		BufferedReader in = null;
		
		try {
			in = new BufferedReader(new InputStreamReader(przychodzacy.getInputStream()));

	        zapis=new PrintWriter(przychodzacy.getOutputStream(),true);
	        zapis.print(test);
	        zapis.close();
	      
	        String wysylka=in.readLine();
	        while(wysylka!=null)
	        {
	        	System.out.print(wysylka);
	        }
	        
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
        
        try {
			przychodzacy.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

Wyrzuca błąd:

 
java.net.SocketException: socket closed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)

Cześć kodu klienta:

	public void odbierz(){
		try {
			gniazdo=new Socket("localhost",4444);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		InputStream we=null;
		BufferedReader odczyt=null;
		PrintWriter  zapis=null;
		
		try {
			we=gniazdo.getInputStream();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(we!=null)
		{
			odczyt=new BufferedReader(new InputStreamReader(we) );
			zapis=new PrintWriter(gniazdo.getOutputStream(),true);
		}
		if(odczyt!=null)
		{
			String tekst=null;
			try {
				
				tekst = odczyt.readLine();
				if (tekst!=null)
				{
					if(tekst.equla("przykladowy test"))
					{
						zapis.print(test);
						zapis.close();
					}
				}
				 catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		try {
			odczyt.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			we.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}