Disconnect des Clients feststellen

  • Themenstarter Themenstarter BuggyMonkey
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

BuggyMonkey

Gast
Hallo zusammen,
nach dem ich jez auch in die welt der OOP eingestiegen bin... versuce ich meinen ersten Chat zu realisieren, klappt auch wunderbar, habe einen code dazu aus dem Internet Funktioniert so weit ganz gut..

.. es gibt nur das Problem, das wenn der Client disconnectet, der Server in einer endlos schleife verfängt...
laso muss ich über prüfen ob der client noch connected ist...
gibt es da einen Befehl / Methode für??

Danke, hier noch mal der Code:
Code:
import java.net.*;
import java.io.*;
import java.util.*;

public class Chatserver implements Runnable{

	public static final int PORT = 8765;
	protected ServerSocket listen;
	protected Vector connections;
	Thread connect;
	
	public Chatserver()
	{
		try
		{
			listen = new ServerSocket(PORT);
		} catch (IOException e)
		{
			System.err.println("Fehler beim Erzeugen der Sockets:"+e);
			System.exit(1);
		}

		connections = new Vector();

		connect = new Thread(this);
		connect.start();
	}
	
	public static void main(String[] args)
	{
		new Chatserver();
	}
	
	public void broadcast(String msg)
	{
		int i;
		connection you;
		for (i=0; i<connections.size(); i++)
		{
			you = (connection) connections.elementAt(i);
			you.out.println(msg);
			
		}
	}
	
	public void run()
	{
		try
		{
			while(true)
			{
				Socket client=listen.accept();

				connection c = new connection(this, client);
				connections.addElement(c);
			}
		} catch (IOException e)
		{
			System.err.println("Fehler beim Warten auf Verbindungen:"+e);
			System.exit(1);
		}	
	}

}

class connection extends Thread
{
	protected Socket client;
	protected DataInputStream in;
	protected PrintStream out;
	protected Chatserver server;

	public connection(Chatserver server, Socket client)
	{
		this.server=server;
		this.client=client;

		try
		{
			in = new DataInputStream(client.getInputStream());
			System.out.println("Client:" + in);
			out = new PrintStream(client.getOutputStream());
		} catch (IOException e)
		{
			try { client.close(); } catch (IOException e2) {} ;
			System.err.println("Fehler beim Erzeugen der Streams: " + e);
			return;
		}

		this.start();
	}


	public void run()
	{
		String line;

		try
		{
			while(true)
			{
				line=in.readLine();
				Socket client=listen.accept();
				System.out.println(client);
				if(line!=null)
					server.broadcast(line);
			}
		} catch (IOException e)
		{
			System.out.println("Fehler:" + e);
		}
	}
}
der Server hängt sich in der while Klasse in der run Methode auf...


Danke für eure Hilfe ! 😀
 
Naja... er hängt sich nicht auf.
Eine while (true) Methode läuft halt ewig. Sprich: solange wie die Bedingung erfüllt ist.
Da sie bei dir ewig erfüllt ist bricht die Schlefie nur ab wenn in ihrem Inneren ein break steht.
Ich bin mir nicht sicher, aber ich glaube von InputStream.readLine() wird null geliefert wenn die Verbindung nicht mehr besteht. Du musstest also darauf prüfen und dann, sollte dem so sein, break aufrufen.
Du prüfst zwar ob line null ist, reagierst aber nicht darauf.
 
Hi nochmal,
das ging ja echt schnell..
und funktioniert supa.. 🙂

wie gesagt, ich bin neu in Java und kenne die klassen methoden etv. noch nicht da ich neu in der OOP bin!

GANZ GROßES DANKESCHÖN!!!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben