# Socket sauber schließen - Prozessor Auslastung 100%



## Gast (22. Jan 2006)

Hallo,
ich hab folgendes Problem:
Ein Client verbindet sich zum Server der für jeden Clieten einen neuen Thread erstellt und diese in einem Vector speichert. Mein Problem ist jedoch, wenn ein Client den Server verlässt ob freiwillig oder unfreiwillig habe ich einfach keine Ahnung wie ich dieses Ereignis abfange bzw. welche Möglichkeiten es mit dem Socket - Objekt gibt. Aus diesem Grunde, geht die Prozessor-Auslastung von meinem PC auf 100% (denk ich mal) weil da halt noch ein Thread ist der da irgendwie beim Server läuft aber der Client halt nicht mehr da ist. Was kann ich tun?
Die Lösung sollte auch die Möglichkeit des unfreiwilligen Verlassens des Servers beeinhalten falls halt mal auf der Client Seite die Internet Verbindung zusammen bricht.

Habe leider auch schon viel gesucht und viel probiert leider ohne Erfolg.
Für Code-Beispiele wäre ich auch sehr dankbar.

Hier mein Code:


```
import java.net.*;
import java.io.*;
import java.util.*;

class chatserver implements Runnable
{
    public static void main(String[] args)
    {
            String bb;
            new chatserver();
    }


        public static final int PORT = 8765;
	protected ServerSocket listen;
	protected Vector connections;
	Thread connect;


	public chatserver()
	{
		try
		{
			listen = new ServerSocket(PORT);
		} catch (Exception e)
		{
			System.err.println("Fehler beim Erzeugen der Sockets:"+e);
			System.exit(1);
		}
		connections = new Vector();

		connect = new Thread(this);
		connect.start();
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

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

	public void broadcast(String msg)
	{
		int i;
		connection you;

		for (i=0; i<connections.size(); i++)
		{
			you = (connection) connections.elementAt(i);
			you.out.print(msg+'\u0000');
		}
	}

    private void jbInit() throws Exception {
    }
}




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());
			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;
                int userint;
		try
		{
			while(true)
			{
				line=in.readLine();
                                                               
				if(line!=null) {
                                   server.broadcast(line);
                                }
			}
		} catch (IOException e)
		{
			System.out.println("Fehler:" + e);
		}
	}
}
```


Vielen Dank


----------



## Guest (24. Jan 2006)

Das würde mich auch interessieren. Hab nämlich das gleiche Problem. :cry:


----------



## Guest (25. Jan 2006)

ERLEDIGT!
Habe das Problem mit einem isBound gelöst in der endlos schleife des threads.

BITTE SCHLIESSEN.


----------



## Guest (25. Jan 2006)

Kannst du vielleicht deinen Code posten?
Wäre nett.


----------

