Eine Wissen-Frage!

Sebastian29

Erfahrenes Mitglied
Hi an alle!

Ich habe ein Client-Programm und ein Server-Programm! So und ich teste gerade im Client-Programm den Verbindungsaufbau zum Server-Programm. Es funktioniert auch alles wunderbar. In der Socket-Programmierung habe ich 4 versch. Exceptions: Connect-, Socket-, SocketTimeout- und IOException dastehen!

Im Client-Programm habe ich ein Label "Netzwerk" mit Farbe rot und grün, um zu sehen, ob das Netzwerk eine Verbindung hat oder nicht.

Meine Fragen im Test lauten:

1.) In welchem Exception geht er rein, wenn ich das Netzwerkkabel während im Betrieb rausziehe?

2.) In welchem Exception geht er rein, wenn ich im Server-Programm auf Button Stop klicke?

Zu Frage 1 weiss ich, dass er immer zu SocketException geht! Da soll Label rot sein! Das funktioniert auch

Zu Frage 2 geht er auch zu SocketException rein und da darf nicht rot sein, da das nichts mit Netzwerk zu tun hat, sondern es besteht nur keine Verbindung zum Server! Das ist mein Problem. Der soll doch zu Connect- oder zu SocketTimeoutException reingehen und nicht zu SocketException!

Gibt es irgendwo eine Seite, wo man nachschlagen kann, welche Ursachen in welchem Exceptions reingeht?

Falls Missverständnis, dann frag mich einfach! :-)

Gruß
Sebastian
 
Das kann mann gar nicht so pauschal beantworten.

Es kommt immer drauf an welche Operation gerade ausgeführt wird. Die Exceptions werden an bestimmten Stellen geworfen und je nachdem welche Stelle gerade ausgeführt wird welche durch ein rausgezogenes Kabel behindert wird wird eine andere Exception geworfen.
 
Naja.. Du könntest, um zu überprüfen ob das Problem am Netzwerk oder am Server liegt, überprüfen, wenn eine SocketException auftritt ob Verbindungen zu anderen Servern möglich sind.. Da nimmst du dann halt einen Server von dem du weißt das er definitiv nicht ausgefallen ist (Eine ping Anfrage an eine bekannt IP z.b.)
Dann wüsstest du schonmal ob das Problem auf Client oder Serverseite liegt..

Gruß
 
Fang deine Exception weiter früher ab. So das der Codeteil durch den catch nicht allzu umfangreich ist.
Somit kannst du jeweils besser eingrenzen was passiert ist.

Eine Möglichkeit ist das du diese Exception abfängst, einen Status setzt, die Exception zusammen mit dem Status kapselst und weiter wirfst. So hast du früh genug abgefangen um herauszufinden was genau denn nicht geklappt hat und kannst aber sie dennoch dort behandeln wo das du vorgesehen hattest.
 
Hi javaprogger!

Also, ich habe im Programm als Übersicht 3 Labels: Netzwerk, Server und Client eingebaut!

Bei Server und bei Client klappt es wunderbar, d.h. wenn keine Verbindung da ist, wird rot makiert und wenn doch, dann grün!

Und für das Label "Netzwerk" wird bei Server und bei Client jeweils nur durch SocketException die Farbe geändert!

Und ich wollte wissen, wann passiert bei SocketException? Eins kenne ich, z.b. Netzwerkkabel rausziehen und alles andere gehen meistens zu Connect- und SocketTimeoutExceptions! Was noch?

Für das Netzwerk-Label habe ich extra reingebaut, wenn ich z.B. sehe, dass Server keine Verbindung hat und es wird bei Server rot makiert, aber man kann nicht erkennen, ob es auch an das Netzwerk daran liegen könnte. Deshalb kommt man mit Netzwerk-Label viel schneller an das Problem als ohne Netzwerk-Label, aber es ist noch nicht sauber, denke ich! Ich möchte ja eine bestimmte Ursache, die immer zu SocketException gehört, ausgeben.

Und wie ihr schon sagten, dass es drauf ankommt, an welche Operation gerade ausgeführt wurde. Ich finde, dass das ein schwieriges Problem ist oder man kann nichts machen!

Gruß
Sebastian
 
Zurück