Connection reset w klasie serwera

0

Witam!

Otóż piszę prostą wielowątkową apkę klient-serwer.
Klasa serwera wygląda mniej więcej tak:

public class Serwer{
	


	public static void main(String[] args) {
		ServerSocket gniazdo=null;
		Socket polaczenie=null;
		
		
		int nrPolaczenia=1;
        try {
			 gniazdo=new ServerSocket(4444);
		
        	while(true)
        	{
        		polaczenie=gniazdo.accept();
        		System.out.println("otwarto polaczenie nr: "+nrPolaczenia);
        		Thread t=new ObslugaPolaczen(polaczenie,nrPolaczenia);
        		t.start();
        		nrPolaczenia++;
        	}
			
        } catch (IOException e) {
			System.out.println("Nie udalo sie otworzyc portu !!!");
		}
       
   }
	
	
}
class ObslugaPolaczen extends Thread
{
	Socket przychodzacy;
	int numerPolaczenia;
	
	public ObslugaPolaczen(Socket i, int nr)
	{
		
		przychodzacy=i;
		numerPolaczenia=nr;
	}
	
	public void run()
	{
		try {
			
			PrintWriter out =
			        new PrintWriter(przychodzacy.getOutputStream(), true);
			BufferedReader in = new BufferedReader(
	                new InputStreamReader(przychodzacy.getInputStream()));
			String inputLine, outputLine;
            
          
            
            outputLine = "dziala serwer";
            out.println(outputLine);

            while ((inputLine = in.readLine()) != null) {
               
                out.println(outputLine);
                if (outputLine.equals("Bye."))
                    break;
            }
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
            
            
	}
}
 

Wyrzuca mi jednak błąd :

java.net.SocketException: Connection reset
	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) 

i dotyczy to linii: while ((inputLine = in.readLine()) != null) { .
Znalazłem na forum podobne tematy jednak dotyczyły one sytuacji kiedy gniazdo=new ServerSocket(4444); znajdowało się w petli while(true), jednak u mnie znajduje się to poza whilem i nadal błąd występuje. Jakieś sugestie?

0

Na szybko patrząc wydaje mi się ze po prostu niczego nie wysyłasz, albo robisz to źle

0

No ale wysyłany jest przecież string.

0

Dobrze by było jakbyś wstawił kod klienta, bo póki co wiemy tylko, że po połączeniu z klientem wysyłasz mu stringa "dziala serwer", a jak coś odpisze to wysyłasz jeszcze raz tego samego stringa, a potem sprawdzasz, czy jest równy "Bye." (a chyba nie to chciałeś zrobić).

            outputLine = "dziala serwer";
            out.println(outputLine); <------ wysylasz stringa outputLine
 
            while ((inputLine = in.readLine()) != null) {
 
                out.println(outputLine); <-------- jeszcze raz wysyłasz stringa outputLine
                if (outputLine.equals("Bye.")) <------ tutaj chciałeś chyba porównać inputLine to Bye?
                    break;
            }

Ogólnie to komunikat "connection reset" oznacza tutaj raczej błąd na input streamie, więc zakładam, że Twój klient jakoś źle wysyła. Wskoczyłeś na zbyt głęboką wodę. Zanim zabierzesz się za wielowątkowy serwer to postaw najpierw serwer z jednym klientem, gdzie wiadomości będzie można wpisywać ręcznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1