# Verbindungsabbau bemerken



## Boltzer (13. Jul 2004)

Hallo,

erstmal den Code:


```
package game;

import java.awt.Point;
import java.io.*;

import ui.MorrisProtocol;
import ui.TokenEditor;

public class NetworkListener extends Thread
{

  private InputStream in =null;
  private OutputStream out = null;
  private BufferedReader inBuffer= null;
  
  private MorrisProtocol morrisProtocol = null;
  private TokenEditor tokenEditor = null;
  
  public String neighbourName=null;

  public NetworkListener(InputStream in, OutputStream out, String currentConnectedName, MorrisProtocol currentProtocol, TokenEditor currentTokenEditor) {
  	this.morrisProtocol = currentProtocol;
  	this.tokenEditor = currentTokenEditor;
  	this.in = in;
    this.inBuffer = new BufferedReader (new InputStreamReader (in));
  	this.out = out;
    this.neighbourName = currentConnectedName;
    setDaemon(true);

  }

  public void run()
  {

    while(true)
    {
      if(isInterrupted()) break;

      try {
      	
      String message = null;
      message = inBuffer.readLine();
	    
		if (message ==null) this.interrupt();
		
	    if (message.equals("message")){
	       message = inBuffer.readLine();
	       System.out.println(message);
	       morrisProtocol.addChatMessage(neighbourName, message);
	     }
	  
	    if (message.equals("StartDrag")){
	        int x =  Integer.parseInt(inBuffer.readLine());
		    int y =  Integer.parseInt(inBuffer.readLine());

		    System.out.println("StartDragNetwork");
		    Point pos = new Point(x,y);
		    tokenEditor.startDrag(pos,true);
	    }
	    
	    if (message.equals("DoDragging")){
	        int x =  Integer.parseInt(inBuffer.readLine());
		    int y =  Integer.parseInt(inBuffer.readLine());

		    System.out.println("DoDraggingNetwork");
		    Point pos = new Point(x,y);
		    tokenEditor.doDragging(pos,true);
	    }
	    
	    if (message.equals("StopDrag")){
	        int x =  Integer.parseInt(inBuffer.readLine());
		    int y =  Integer.parseInt(inBuffer.readLine());

		    System.out.println("StopDragNetwork");
		    Point pos = new Point(x,y);
		    tokenEditor.stopDrag(pos,true);
	    }
	    
	
	  } 
      catch (IOException e) 
	  {
		e.printStackTrace();
	  }

      }


   }


  }
```


Dies ist ein Thread der beim Server und Client ausgeführt wird. Dies klappt auch wunderbar, ich bekomm nur ein "java.net.SocketException: Connection reset" - Fehler, wenn ein Spieler das Programm schließt. Also meine Frage, wie bekomm ich im Thread mit, dass die Verbindung verloren wurde? Danke...

Gruß,

Boltzer


----------



## meez (13. Jul 2004)

Mit einer kontrollierten Exception...


----------



## Grizzly (13. Jul 2004)

Soweit ich das weiss bekommst Du das so ohne weiteres gar nicht mit. Bei Borland Delphi bspw. gibt es ein Ereignis, das ausgelöst wird, wenn die Gegenstelle die Verbindung schliesst. Bei Java ist dies jedoch nicht der Fall. Hier erkennt man dies nur, in dem man versucht Daten an die Gegenstelle zu schicken und dann eine Exception bekommt.

Man könnte sich rein theoretisch noch eine Klasse um die Socket Klasse drum rum basteln, die die Exception beim Senden abfängt und dann entsprechende Listener informiert.


----------



## Boltzer (13. Jul 2004)

öhm.. wie muss ich die catch-Methode dann abändern um "java.net.SocketException: Connection reset" abzufangen? Hab das noch nie gebraucht?


----------



## meez (13. Jul 2004)

```
catch (Exception e)
     {
   this.interrupt();
      //e.printStackTrace();
     }
```


----------

