Exception Handling bei In/Outputsockets in eigenen Threads

Decline

Mitglied
Hallo

ich habe folgenden Aufbau:
Meine Application in der diverse Magie passiert und dem User über eine Benutzeroberfläche präsentiert wird. Die Genau Zusammenstellung ist für meine Frage nicht wirklich relevant.
2 seperate Threads die einen Input bzw. Output zu einer peripheren Hardware in form eines sockets bilden.

Die In und Outputs werden dazu benutzt um über ein Protokol zu kommunizieren. In den beiden Threads läuft ein infiniteloop der darauf wartet Nachrichten zu verarbeiten, um sie dann über AccessObjects der Application zur Verfügung zu stellen.

Soweit so gut, und es funktioniert alles tadelos, allerdings frage ich mich gerade wie ich IOExceptions bzw. Socketexceptions in diesen Threads handeln soll.

Ich sehe hier 3 Möglichkeiten.
1) Implizite Lösung mit den AccessObjects. Jedes mal wenn ich eine Nachricht schicke überprüfe ich ob der socket noch am Leben ist. Wenn nicht teile ich das dem User mit. Beim Output habe ich es so gelöst, da ich sofort mitbekomme wenn etwas nicht in Ordnung ist, da die Kommunikation von meiner Seite aus initiert wird. Beim Input habe ich allerdings das Problem dass ich grundsäztlich auf Nachrichten eines bestimmten Types warte, um die sich dann verschiedene Komponenten kümmern.
Es gibt allso kein allgemeines Timeout da es auch im Betriebsfall sein kann das nicht laufend Nachrichten kommen.
Ich könnte das Problem mit diesem Ansatz lösen, allerdings würde mich interessieren ob eine der folgenden Lösungen nicht vielleicht besser ist. Im wesentlichen würde ich mir damit den ExceptionHandling code an vielene Stellen ersparrren, da ich die Exceptions dann an einer stelle verarbeiten könnte.

2) ich starte einen zusätzlichen Monitorthread der alle x sekunden überprüft ob die beiden Threads noch arbeiten.

3) ich baue den beiden Kommunikationsthreads Listener ein, über die die Mainapplication über Zustandsänderungen informiert werden kann. Dazu noch eine Zusatzfrage. Ist es zulässig zwischen verschiedenen Threads mithilfe von Listenern zu kommunizieren? In den meisten nebenläufigen Anwendungen wäre diese Lösung ja sowieso inpraktikabel da die Kommunikation laufend erfolgen muss. Aber in meinem Fall will ich eigentlich nur dem User über den Status der Sockets unterrichten, weshalb ich mir denke das es zumindest eine Lösung wäre die man in betracht ziehen könnte.

Ich hoffe ich habe die Problematik verständlich beschrieben.
Danke für allfällige Antworten

mfg
Decline
 

wef34fewrg

Aktives Mitglied
Ist das Problem denn noch aktuell?

So ganz verstehe ich es leider nicht. Tut mir Leid.


1.
Alles was du brauchst ist eine TCP Verbindung zwischen den Teilnehmern. Java nimmt dir da alles ab. Die Frage ob die Verbindung noch steht bzw. auf einer Seite offen oder geschlossen ist. Du kannst ein entsprechendes Objekt auf Serverseite erstellen, dieses an den Input schicken, welches mit den vorgepackten Daten anstellen kann, was du willst.
Wenn du den Code für Exception Handlung nicht haben willst, dann musst du die Exceptions eben so lange an einen Aufrufer weiter geben, bis die "zentrale Sammelstelle" für Exceptions erreicht ist.

2.
Die Threads laufen so lange wie du es willst. Du kannst bestimmen wann sie aus welchen Gründen unterbrochen, oder wieder aufgenommen werden.
Allgemein halte ich (persönlich) sowieso gar nichts von Zufalls Lösungen ala "ich guck ab und zu mal ob alles noch läuft". :)

3.
Lange Antwort ja mit einem wenn, kurze Antwort nein, mit einem aber. :)

Letztlich gehts dir ja (glaube ich) um: "Aber in meinem Fall will ich eigentlich nur dem User über den Status der Sockets unterrichten"

Die Klasse Socket, mit der du das realisierst, bietet dir dafür die Möglichkeiten.


Ansonsten meld dich halt noch mal, aber so ganz werd ich aus deiner Denke nicht schlaue, sorry :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Webserviceaufruf verursacht eine Exception Netzwerkprogrammierung 3
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
A Cast Exception bei einfachem RMI Beispiel Netzwerkprogrammierung 3
M Socket Exception tritt auf - weiß nicht weiter Netzwerkprogrammierung 3
K Socket Exception Connection reset Netzwerkprogrammierung 9
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7
H Socket Closed Exception verhindern Netzwerkprogrammierung 3
M RMI unmarshaling exception ??? Netzwerkprogrammierung 2
D Socket Streams schliessen .. Exception gewollt? Netzwerkprogrammierung 4
K Socket Socket Exception Netzwerkprogrammierung 3
eQuest RMI Unserializable Exception Netzwerkprogrammierung 4
F Bekomme NoSuchElement Exception Netzwerkprogrammierung 5
S RMI Exception Netzwerkprogrammierung 2
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
clupus Exception beim Schließen eines Sockets Netzwerkprogrammierung 6
G Exception javax.naming.CommunicationException Netzwerkprogrammierung 16
G Nullpointer Exception - Multithreading Netzwerkprogrammierung 25
G XML-RPC -> Exception $Proxy0-Unknown Source-No such handl Netzwerkprogrammierung 8
T Exception serialisieren? Netzwerkprogrammierung 5
K öffnen des socket schlägt fehl -> ABER: keine exception . Netzwerkprogrammierung 2
M ois nicht null, aber ois.getObject liefer exception Netzwerkprogrammierung 3
R ObjectOutput- / ObjectInputStream Exception? Netzwerkprogrammierung 2
D EA-Exception Network Adapter macht probleme Netzwerkprogrammierung 2
F Java Mail . Exception java.lang.NoClassDefFoundError Netzwerkprogrammierung 2
M Exception in thread "main" java.lang.NoClassDefFou Netzwerkprogrammierung 2
J JavaMail Exception bei senden an anderen Server. Netzwerkprogrammierung 8
M schreiben auf geschlossenen Socket ohne Exception Netzwerkprogrammierung 6
R LINUX: getHostAddress() und getHostName() werfen Exception Netzwerkprogrammierung 6
8 PrintWriter Exception Netzwerkprogrammierung 3
D socket exception + timing probleme Netzwerkprogrammierung 2
A Exception bei Cookie lesen Netzwerkprogrammierung 2
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
B Socket Thread handling / Reader init Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben