-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Java: Verbindungsabbruch erkennen?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    27
    Beiträge
    102

    Java: Verbindungsabbruch erkennen?

    Anzeige

    Hi Leute.

    Ich hab da mal ne relativ simple Frage (ich hoffe, dass sie das ist).

    Und zwar, wie kann ich in Java bei einem Socket (java.net.Socket, also Client-seitig) erkennen wenn die Verbindung unterbrochen wurde. Ja, ich weiß, mann kann den Status über isConnected() abfragen, etc., aber der Socket gibt auch dann nur "true" zurück, wenn die Verbindung schon unterbrochen wurde. Beispiel:

    Ich verbinde mich mit dem Hyperterminal zu einem ServerSocket. Die accept()-Methode des ServerSockets gibt ja bei einer eingehenden Verbindung einen Client-Socket zurück, welcher dann zum Kommunizieren verwendet werden kann.
    Wenn ich das Hyperterminal dann einfach schließe oder auf "Trennen" klicke, gibt der Socket aber als Status immernoch verbunden zurück.

    Wie kann ich das also erkennen?
    Wäre dankbar für einen Lösung!

    Gruß,
    Jan.
    irOS - independent robot operating system
    www.ir-os.de

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ganz allgemein isses bei Socken so, daß du erst dann eine Fehlermeldung bekommst, wenn du in receive() bist.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    27
    Beiträge
    102
    Hi.

    Hm... de Methode receive() gibt es in Java zwar meines Wissens nicht. Aber falls du meinst, dass er den hereinkommenden Stream lesen soll, da kann ich ja ewig warten, schließlich sendet der andere Socket nichts mehr.

    Wie würdest du das den feststellen?

    Gruß,
    Jan.
    irOS - independent robot operating system
    www.ir-os.de

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wie gesagt, ich geh' vom Normal-Socken Verhalten aus. Es ist Aufgabe des Netzwerk, beim Warten auf Daten ggf. eine Fehlermeldung abzusetzen. eine explizite Exception / Callback definition gibt's ja nicht, also muß es eine Methode / function sein, die einen Error-Code liefern kann. Als nicht Javaner kann ich dir leider nicht sagen, auf welche weise du zu daten kommst. Aber genau da sollte die musik spielen.
    Wie gesagt, einen disconnect festzustellen, ist sache des Netzwerk.

    Es hilft wahrscheinlich nur Lesen, ev. auch bei TELNET schauen, denn darüber läuft ja Hyperterm (mit IP)

    Vielleicht krieg ich noch was raus, aber wenn du als unser Java-Guru Schwächen zeigst, wird's für andere noch schwieriger
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    27
    Beiträge
    102
    Was heißt hier Java-Guru?? Ich bin blutiger Anfänger! Ok, ich pirsche mich langsam an den Status eines Hobby-Programmiers an, aber mehr auch nicht. Naja, egal.

    Lesen geht ja bei Java über InputStreams, bzw. über einen Reader, der diesen ausließt. Das Problem an der Sache ist, dass ich einen BufferedReader verwende, das heißt er puffert die Eingabe so lange, bis ein Zeilumbruch gesendet wird. Und da ich den wiederum in einer Endlos-Schleife laufen lasse, blockt er solange, bis eine Eingabe kommt. Jetzt kommt natürlich der Vorschlag: "Nimm doch einen ungepufferten Reader!". Das wäre für mich aber viel komplizierter... und ich würde gerne ohne auskommen, wenns geht.
    Ich hatte gehofft, dass es hier noch jemanden außer mir gibt, der sich mit Netzwerkprogrammierung unter Java einigermaßen auskennt.

    Bis denn, Gruß,
    Jan.
    irOS - independent robot operating system
    www.ir-os.de

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Dann schau dir den bufferedReader nochmal an, was es in dieser Richtung zu wissen gibt. Da müßt schon irgendwas in der Richtung da sein, sonst könnt' es ja kein Ferkel brauchen, das glaub ich nicht.
    Vielleicht find ich auch was, mal sehen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Zwischenfrage: Du verwendest aber nicht UDP (connectionless) sondern TCP ?


    EDIT:
    Du müßtest beim Lesen des Buffers eigentlich die Länge der Daten zurückkriegen. Wenn das so ist und die Länge NULL ist, ist die Verbindung futsch.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    27
    Beiträge
    102
    Hi.

    Ich verwende TCP. Aber das Problem hat sich schon gelößt, ich hab mir selbst das Bein gestellt . Und zwar hatte ich eine if-Abfrage gemacht die lautete:
    Code:
    if(inputMessage != null)
    {
       ...;
    }
    else
       continue;
    Ich wollte so verhindern, dass eine leere Nachricht weitergegeben wird, ist ja klar. Nur bin ich nicht auf die Idee gekommen, dass das nur dann, und auch nur dann passiert, wenn die Verbindung abgebrochen wird. Wenn du zum Beispiel einfach "Enter" drückst, also eine leere Nachricht sendest, ist diese nicht null sondern "".
    Naja, auf jeden Fall gehts jetzt.
    Danke trotzdem!

    Gruß,
    Jan.
    irOS - independent robot operating system
    www.ir-os.de

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ich find's super, daß du diese (Selbst-)Lösung gepostet hast, dadurch haben alle was davon gelernt.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    27
    Beiträge
    102
    Ist doch klar!

    Ich will mein Wissen doch niemandem vorenthalten! Ich helfe gerne.
    Aber man muss auch sagen, dass das ein doch recht dummer Fehler war, ich hab mich schließlich selbst ausgetrickst Naja, aber jetzt passiert es anderen vielleicht nicht so leicht.

    Gruß,
    Jan.
    irOS - independent robot operating system
    www.ir-os.de

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •