Verbindungsabbau bemerken

Status
Nicht offen für weitere Antworten.

Boltzer

Mitglied
Hallo,

erstmal den Code:

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
 

Grizzly

Top Contributor
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

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

meez

Top Contributor
Code:
  catch (Exception e)
     {
   this.interrupt();
      //e.printStackTrace();
     }
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben