Verriegeln, aber wo? Finde den Client der zu schließem ist.

ortauq

Aktives Mitglied
Ich habe eine Klasse, die einige Methoden besitzt, die im Grunde alle asynchron von irgendwelchen Thread aufgerufen werden können.
Diese Klasse besitzt Client-Objekte, welche sich zu einem Server verbinden.
Nun scheint es, als ob irgendwelche Verbindungen nicht geschlossen werden.
Hat irgendjemand eine Vermutung, wo/wann dies passiert?

Ich muss wahrscheinlich irgenwelche Code-Teile gegen wiedereintritt verriegeln. Aber wo?


Hier ein Auszug aus dem Code:

Code:
public class EngelDataProviderTimerTaskCC200 extends
		EngelDataProviderTimerTaskBase
{

	// Connection
	private String m_Ip = null;
	private RpcSvNetworkClient m_svNetworkClient = null;
	private RpcSystemNetworkClient m_systemNetworkClient = null;
	private RpcSaNetworkClient m_SaNetworkClient = null;
	private ConnectingThread m_ConnectingThread = null;

	// Sync/Lock Obejcts
	private final Object m_PeterOutSync = new Object();

	// ###################################################
	// ############# OVERRIDE METHODS ####################

	@Override
	public void start(String ip, int port, String user, String pw)
	{

		fireInformationOverErrorListener("start(). start main cc200 timer/timertask.");

		// configure ip
		this.m_Ip = ip;

		// start this timer/timertask itself
		this.m_RefreshTimer = new Timer();
		this.m_RefreshTimer.schedule(this, 0, m_MainTaskRefreshTime);
	}

	@Override
	public void stop()
	{
		fireInformationOverErrorListener("stop(). try to disconnect. stop every timer/timertask.");

		// stop all the other timertasks/timers and set them to null
		stopAllTasks();

		// stop this timertask+timer itself
		m_RefreshTimer.purge();
		m_RefreshTimer.cancel();

		this.cancel();

		// disconnect
		this.disconnect();

		synchronized (m_PeterOutSync)
		{
			return;
		}

	}

	@Override
	public boolean isConnected()
	{
		fireInformationOverErrorListener("isConnected(). update connection state.");

		// update connection state
		setConnectionStateOnValidKeepAlive();

		return m_IsConnected.getConnectionState();
	}
	}

	// ############# TIMERTASK MAIN METHOD ##########################

	/**
	 * Tries to connect if not connected. Tries to send a regular keep alive if
	 * connected.
	 */
	@Override
	public void run()
	{
		synchronized (m_PeterOutSync)
		{
			try
			{

				// if not connected, try to connect
				if (!m_IsConnected.getConnectionState())
				{
					if (m_ConnectingThread == null)
					{
						this.connect();
					} else if (!m_ConnectingThread.isAlive())
					{
						this.connect();
					}
				}

				// if connected, try to send a keep alive, if needed.
				if (m_IsConnected.getConnectionState())
				{
					this.sendKeepAliveIfNeeded();
				}

			} catch (Exception e)
			{
				fireExceptionOverErrorListener(e);
			}
		}

	}

	// ###################################################
	// ############# HELPING METHODS #####################

	/**
	 * checks if there is still a connection to the machine and sets connection
	 * state, depending on the connection.
	 */
	private void setConnectionStateOnValidKeepAlive()
	{
		// able to get a valid keep alive?
		if (keepAlive())
		{
			// yes -> connected
			m_IsConnected.setConnected();
		} else
		{
			// no -> disconnected
			this.disconnect();
			m_IsConnected.setDisconnected();
		}

		m_KeepAliveCounter = 0;

	}

	/**
	 * A Thread that tries to connect to an machine with 3 diefferent
	 * clients.
	 */
	private class ConnectingThread extends Thread
	{

		@Override
		public void run()
		{
			m_IsConnected.setDisconnected();

			disconnect();

			try
			{
				RpcSystemNetworkClient sy = getSystemNetworkClient();
				sy.connect(m_Ip, "?");

				RpcSvNetworkClient sv = getSvNetworkClient();
				sv.connect(m_Ip, "?");

				RpcSaNetworkClient sa = getSaNetworkClient();
				sa.connect(m_Ip, "?");

			} catch (Exception e)
			{
				System.out.print("timeout\n");

				fireExceptionOverErrorListener(e);

				fireExceptionOverErrorListener(new Exception(
						"EXEPTION -> could not construct a socket connection. check machine. ip might be wrong."));

				fireExceptionOverErrorListener(new Exception(
						"EXEPTION -> could not connect. try again immediately."));

				disconnect();

				return;
			}

			m_IsConnected.setConnected();

		}
	}

	/**
	 * Tries to connect some time. Then returns. If it is not connected, when
	 * returning from connect(), it might connect afterwards(until the
	 * connecting thread is done).
	 */
	private void connect()
	{

		fireInformationOverErrorListener("connect(). try to connect network clients to machine.");

		// Start a thread that tries to connect to an Engel machine
		m_ConnectingThread = new ConnectingThread();

		javax.swing.Timer connectingTimer = new javax.swing.Timer(
				m_ConnectingTimeout, null);
		connectingTimer.setRepeats(false);

		m_ConnectingThread.start();
		connectingTimer.start();

		System.out.println("start timeout timer");

		// if the thread is not done with connecting after some time, return
		// from connect().
		while (m_ConnectingThread.isAlive() && connectingTimer.isRunning())
		{
			try
			{
				Thread.sleep(100);
			} catch (InterruptedException e)
			{
				fireExceptionOverErrorListener(e);
			}
		}

	}

	/**
	 * Disconnect every client connected to a machine.
	 */
	private void disconnect()
	{

		try
		{

			if (m_systemNetworkClient != null)
			{
				System.out.println("disconnect SY");
				if (m_systemNetworkClient.getSocket() != null)
				{
					m_systemNetworkClient.getSocket().close();
				}
				m_systemNetworkClient.disconnect();
				m_systemNetworkClient = null;
			}

			if (m_svNetworkClient != null)
			{
				System.out.println("disconnect SV");
				m_svNetworkClient.disconnect();
				m_svNetworkClient = null;
			}

			if (m_SaNetworkClient != null)
			{
				System.out.println("disconnect SA");
				m_SaNetworkClient.disconnect();
				m_SaNetworkClient = null;
			}

			m_IsConnected.setDisconnected();

		} catch (Exception e)
		{
			fireExceptionOverErrorListener(e);
		}
	}

	// ############# GET CLIENT ##########################

	/**
	 * @return returns a new / the current SvNetworkClient.
	 */
	public synchronized RpcSvNetworkClient getSvNetworkClient()
	{
		if (m_svNetworkClient == null)
		{
			m_svNetworkClient = new RpcSvNetworkClient();
		}
		return m_svNetworkClient;
	}

	/**
	 * 
	 * @return returns a new / the current SystemNetworkClient.
	 */
	public synchronized RpcSystemNetworkClient getSystemNetworkClient()
	{
		if (m_systemNetworkClient == null)
		{
			m_systemNetworkClient = new RpcSystemNetworkClient();
		}
		return m_systemNetworkClient;
	}

	/**
	 * 
	 * @return returns a new / the current SaNetworkClient.
	 */
	public synchronized RpcSaNetworkClient getSaNetworkClient()
	{
		if (m_SaNetworkClient == null)
		{
			m_SaNetworkClient = new RpcSaNetworkClient();

		}
		return m_SaNetworkClient;
	}

	// ############# KEEP ALIVE ##########################

	/**
	 * sends a "keep alive, if some time has passed.
	 */
	private void sendKeepAliveIfNeeded()
	{
		fireInformationOverErrorListener("sendKeepAliveIfNeeded(). send a keep alive, if some time passed.\ntime passed since last keep alive: "
				+ (m_KeepAliveCounter * m_MainTaskRefreshTime));

		// check if it is time to send a keep alive
		if (m_KeepAliveCounter >= m_KeepAliveTime / m_MainTaskRefreshTime)
		{

			if (keepAlive())
			{
				this.m_IsConnected.setConnected();
			} else
			{
				this.disconnect();
				this.m_IsConnected.setDisconnected();
			}

			m_KeepAliveCounter = 0;
		} else
		{

			m_KeepAliveCounter++;
		}

	}

	/**
	 * To keep alive the connections of clients, connected to a machine.
	 * 
	 * @return returns true, if keep alive was valid/successful.
	 */
	private boolean keepAlive()
	{
		fireInformationOverErrorListener("keepAlive(). send a keep alive.");

		try
		{
			// check on an existing socket
			if (getSystemNetworkClient().getSocket() == null)
			{
				fireExceptionOverErrorListener(new Exception(
						"EXEPTION -> keepAlive(). no socket available. connection is not alive (anymore)."));

				return false;
			}

			// get some information to keep connection alive
			getSystemNetworkClient().getDateTime().getTime();
			getSvNetworkClient()
					.getItemId("CycleTime.sv_CycleTime.dActvalLast");
			getSaNetworkClient().getAlarmInfo();

			fireInformationOverErrorListener("keepAlive(). no exceptions occured during sending a keep alive");

			return true;

		} catch (Exception e)
		{
			fireExceptionOverErrorListener(e);
			fireExceptionOverErrorListener(new Exception("Exc is here!!"));
		}

		fireExceptionOverErrorListener(new Exception(
				"EXEPTION -> keepAlive(). can't get information. might not be connected anymore."));
		return false;
	}

}

Nachdem ich 2-3 Mal die Verbindung zum Server gewollt verhindere, stellt das Objekt dieser Klasse automatisch wieder eine Verbindung her.
Beim 3. oder 4. Mal schafft er es nicht mehr, da der Server keine Clients mehr annimmt. Also wurde irgendwelche Clients nicht ordentlich vom Server getrennt.


Ich habe es überprüft. Der Client wird so ordentlich geschlossen:
client.disconnect();
client = null;

Ich verstehe das ganze irgendwie nicht.
Kann mir vielleicht jemand helfen, dieses Rätsel zu lösen? ^^"
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
L Mergesort (aber anders) Java Basics - Anfänger-Themen 2
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
OSchriever Jar-Programm läuft auf Windows aber nicht auf Linux(Raspberri Pi4) Java Basics - Anfänger-Themen 22
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
AGW App programmiert lassen, aber Änderungen vornehmen Java Basics - Anfänger-Themen 13
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
B Java Mail -> Mail senden, ist aber nich in IMAP unter "Gesendet" Java Basics - Anfänger-Themen 3
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
S Programmierung simulieren - aber wie?! Java Basics - Anfänger-Themen 3
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
J Mit OpenJDK entwickeln aber Oracle SE Runtime installieren? Java Basics - Anfänger-Themen 6
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
A Java-Programm läuft bei installierter JDK aber nicht mit JRE? Java Basics - Anfänger-Themen 5
C Statischer Typ aber Variable nicht statisch? Java Basics - Anfänger-Themen 5
J ShortCut erstellen aber wie die dll einbinden Java Basics - Anfänger-Themen 3
I "\n" aus ArrayList enfernen, aber wie?! Java Basics - Anfänger-Themen 4
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
J JavaEditor kompiliert aber startet nicht Java Basics - Anfänger-Themen 1
B Email versand - aber akzeptiert auch falscher Username und Passwort??? Java Basics - Anfänger-Themen 1
O Array benutzen aber WIE? Java Basics - Anfänger-Themen 18
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
A Variabler Rekursionsaufruf, aber wie? Java Basics - Anfänger-Themen 6
N Ausführung gibt keinen Fehler an, Return wird aber nicht ausgegeben Java Basics - Anfänger-Themen 22
M Methoden Zwei Methoden in einem Program laufen lassen...aber wie? Java Basics - Anfänger-Themen 2
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
J Serialisieren, aber wie? Java Basics - Anfänger-Themen 3
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
snipesss Java-Code gedownloaded, funktioniert aber nicht? Java Basics - Anfänger-Themen 9
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
P Irgendein billiger Fehler aber ich find ihn nicht Java Basics - Anfänger-Themen 16
Thallius Date für DatePicker formatieren aber wie? Java Basics - Anfänger-Themen 9
J Nullpointer aber wo? Java Basics - Anfänger-Themen 12
E Dumme Frage, aber... Java Basics - Anfänger-Themen 15
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
Tacofan Schleife aber nur wie? Java Basics - Anfänger-Themen 10
V char Eingabe aber nur für Buchstaben Java Basics - Anfänger-Themen 4
J Eine Art verkettete Liste aber mit teils mehr als einem Nachfolger Java Basics - Anfänger-Themen 8
J Programm funktioniert aber unsafe operations? Java Basics - Anfänger-Themen 3
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
GadgetSofa jComboBox mit dem Button verbinden. Aber wie?? Java Basics - Anfänger-Themen 4
GadgetSofa IOException fehlt aber wo einfügen? Java Basics - Anfänger-Themen 6
J TCP MultiThreaded Server und Client - irgendwo ist der Fehler, aber ich find ihn nicht Java Basics - Anfänger-Themen 3
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
D 0 Point Exeption... aber warum? Java Basics - Anfänger-Themen 3
D Compiler-Fehler NullPointerExeption aber Ecplise zeigt keine Fehler an?! Java Basics - Anfänger-Themen 8
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
A Ping Pong Score Zähler,aber wie? Java Basics - Anfänger-Themen 3
Z Zwei Images auf einem JFrame - Aber nur eins wird angezeigt! Java Basics - Anfänger-Themen 5
S OOP Die Methode funktioniert, aber wieso? Java Basics - Anfänger-Themen 2
I Programm testen, aber wie? Java Basics - Anfänger-Themen 14
T String simpel aber sicher verschlüsseln Java Basics - Anfänger-Themen 5
I ZIP Archive erstellen - ich möchte aber nur den jeweiligen Ordner zippen, bekomme ganzen Pfad Java Basics - Anfänger-Themen 1
H [erledigt] Variable initialisiert, aber nicht verfügbar (Schleife) Java Basics - Anfänger-Themen 3
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
B Array erstellen,ausgeben,mit zufallszahlen füllen aber wie ? Java Basics - Anfänger-Themen 1
T webapp aber wie... Java Basics - Anfänger-Themen 7
F Fehler in der Swich-Anweisung aber Warum? Java Basics - Anfänger-Themen 4
M Erzeugen beliebig vieler Objekte, aber wie wechselnde Bezeichner? Java Basics - Anfänger-Themen 5
C Slideshow Übergänge - aber wie? Java Basics - Anfänger-Themen 3
F String wird richtig in konsole geschrieben aber falsch an Methode übergeben Java Basics - Anfänger-Themen 8
J Vererbung Kleiner Fehler, weiß aber nicht warum und wo Java Basics - Anfänger-Themen 9
A Klassen JTextField eigtl leer aber es werden Methoden ect. angezeigt Java Basics - Anfänger-Themen 9
K Variablen Instanzen gleich aber warum ? Java Basics - Anfänger-Themen 3
F Variablen String wird in int umgewandelt aber trotzdem String? Java Basics - Anfänger-Themen 5
S Programm läuft in Eclipse, aber nicht über Konsole Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben