Wiederverbinden nach socket Abbruch

Fohnbit

Top Contributor
Hallo!

Mir macht die Strategie beim reconnect eines socket Abbruchs etwas Schwierigkeiten.
socket1
Es gibt 1 Methode die den Verbindungsaufbau initieren:
onStart(boolean)

socket2
Bei jedem Verbindungsaufbau muss zuerst ein config befehl über einen anderen Socket gesendet werden.
Dafür muss socket1 beenden, socket2 starten, config senden, socket2 schließen und nach 4 Sekunden socket1 wieder starten.

socket1
Wenn der Verbindungsaufbau scheitert oder beim senden Fehler entstehen, soll ein reconnect nach 10 Sekunden erfolgen, welcher immer im Loop läuft, bis die verbindung wieder steht oder onStop ausgeführt wird.

Die Sockets habe ich fertig. Einzig die Strategie für den reconnect fehlt mir.

Java:
public void onStart(boolean value) {
        if (value) {
            shouldBeConnected = true;
            connect();
        } else {
            shouldBeConnected = false;
            disconnect(false, false);
        }
    }

Java:
public synchronized void disconnect(boolean reconnect,
            boolean controlMessage) {
        System.out.println("Disconnect, reconnect: " + reconnect);
       
        // Debug Ausgabe
        updateOutputState(EnumAutostartState.Stopping.getNumVal());

        // Falls der Reconnect Timer läuft, abbrechen
        if (reconnectTimer != null) {
            reconnectTimer.cancel(true);
            reconnectTimer = null;
        }

        // Wenn der Socket existiert
        if (socket1 != null) {

            try {
                socketClient.setDesonnected(true);
                socket1.close();
            } catch (Exception e) {
                updateOutputError("[ERROR] Closing USB-2: " + e);
                // System.err.println("Error closing client : " + e);
            }
        }
        socket1 = null;
        updateOutputState(EnumAutostartState.Stopped.getNumVal());
        if (shouldBeConnected) {
            executor.schedule(new Runnable() {
                public void run() {
                    connect();
                }
            }, 500, TimeUnit.MILLISECONDS);
        }

    }

    private void connect() {
        System.out.println("Connect.");
       
        // Wenn gar nicht verbunden sein soll, abbrechen
        if (!shouldBeConnected) {
            return;
        }
       
        // Wenn verbunden, zuerst trennen und neu verbinden
        if (socket1 != null) {
            disconnect(true, false);
            return;
        }

        // Neue Einstellungen senden
        generateSendControlParameter();

        // Debug Ausgabe
        updateOutputState(EnumAutostartState.Starting.getNumVal());

        String ip = inetAddress.getHostAddress();
        int port = 28880;
        if (!Util.checkHost(ip)) {
            updateOutputError("[ERROR] Destinantion not reachable!");
            updateOutputState(EnumAutostartState.Failed.getNumVal());
            reConnect();
            return;
        }

        try {

            // System.out.println("Connectig in normal mode : " + ip + ":"
            // + portNo);
            socket1 = new Socket();
            socket1.connect(new InetSocketAddress(ip, port), 2000);

        } catch (Exception e) {
            e.printStackTrace();
            updateOutputError("[ERROR] Opening Connection: " + e.getMessage());
            updateOutputState(EnumAutostartState.Failed.getNumVal());
            reConnect();
            return;
        }

        socketClient = new SocketClient(this, socket1);
        updateOutputState(EnumAutostartState.Running.getNumVal());

    }

Java:
    private void reConnect() {

        if (!shouldBeConnected) {
            return;
        }

        if (reconnectTimer != null) {
            reconnectTimer.cancel(true);
            reconnectTimer = null;
        }

        reconnectTimer = executor.schedule(new Runnable() {
            public void run() {
                System.out.println("start Timer Reconnect");
                connect();
            }
        }, retryToStartDelay, TimeUnit.MILLISECONDS);
 

BuckRogers

Bekanntes Mitglied
Hi,

du kannst dir mit einer Klassenvariable merken an welcher Stelle die Verbindung/Verbindungsaufbau gerade steht.
Wenn du jedoch jetzt einfach die connct()-Methode aufrufst, dann geht die ganze PRozedur von vorn los. Das willst du ja nicht, wenn du zum Beispiel die ConfigDaten schon gesendet hast. Mit deinem momentanen Aufbau der Klasse ist das nicht möglich. Du solltest dafür sorgen, dass eine Methode IMMER nur genau eine Aufgabe übernimmt. Dann hast du eine "Hauptmethode" in deiner Klasse die einfach die anderen Methoden nur aufruft und Parameter übergibt etc. Somit trennst du fein säuberlich die Zuständigkeiten innerhalb der Klasse.

Du solltest wenn versuchen immer alle Fehler mit Exceptions abzufangen und dann geeignete Maßnahmen einleiten um den Fehler zu behandeln. Wenn beispielsweise das senden der Configuration geklappt hat, aber der Aufbau der neuen Socketverbindung scheitert, dann fängst du diese Exception ab (in deiner Hauptmethode) und kannst dort zu Beispiel eine Schleife einbauen, welche alle 10 Sekunden versucht diese Socketverbindung wieder herzustellen.

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dann07 Audio streamen bricht immer ab nach kurzer Zeit Netzwerkprogrammierung 6
G seite nach posten eines html-forms laden Netzwerkprogrammierung 0
N websocket - keine Daten mehr nach ca 80 Sekunden Netzwerkprogrammierung 0
C Gerenderte Website nach der ausführung von JavaScript als HTML Code aus lesen Netzwerkprogrammierung 4
T Socket sendet erst nach socket.close() Netzwerkprogrammierung 2
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
L Verzeichnisse mit Inhalt nach SMB-Share kopieren Netzwerkprogrammierung 16
N HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten. Netzwerkprogrammierung 5
K Socket Chat-GUI eigenes Event nach Empfangen Netzwerkprogrammierung 2
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
P Datenpakete nach Australien Netzwerkprogrammierung 7
C Socket Identifikation des clients nach der accept() Methode Netzwerkprogrammierung 2
J Nach Dateiversand werden keine Nachrichten mehr übertragen Netzwerkprogrammierung 11
J Nachricht kommt erst nach beendigung der Anwendung an Netzwerkprogrammierung 4
D Socket Automatischer Reconnect nach einem Disconnect. Netzwerkprogrammierung 4
S Socket nach anderen clients im netzwerk suchen Netzwerkprogrammierung 3
B IP nach gewissen Kriterien überprüfen Netzwerkprogrammierung 5
V JNLP startet nicht !!?!! (je nach PC) Netzwerkprogrammierung 1
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
DeviAn Über ein Linux Server ein Windows Server nach einer File fragen Netzwerkprogrammierung 6
Q Datein von Windows nach Mac senden Netzwerkprogrammierung 4
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
T Zugriffsverweigerung nach Dateitransfer Netzwerkprogrammierung 7
T Nach Servern suchen Netzwerkprogrammierung 2
K Bad Request nach Form Login in Jakarta HttpClient Netzwerkprogrammierung 4
L nach Servern suchen Netzwerkprogrammierung 2
M ordner nach socket-übertragung defekt Netzwerkprogrammierung 5
B Im eingelesenen Text nach einem Wort suchen Netzwerkprogrammierung 46
M serialisierung funktioniert nur nach neuer instanzierung Netzwerkprogrammierung 3
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
A Client stürzt nach versand ab Netzwerkprogrammierung 13
M Verbindung nach Serverabsturz wieder aufbauen Netzwerkprogrammierung 9
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
G Port belegt nach Server restart Netzwerkprogrammierung 5
G Socket wird nach Portscann geschlossen Netzwerkprogrammierung 2
N Verarbeitung nach Weiterleitung in Sockets Netzwerkprogrammierung 2
L Frage nach Socket Netzwerkprogrammierung 4
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
B Versuch mit Socket etwas zu lesen und zu schreiben Netzwerkprogrammierung 15
G Socket Socket Kommunikation Netzwerkprogrammierung 1
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
D Socket-Verbindungen übers Internet Netzwerkprogrammierung 4
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
A TCP multiClientServer mit socket mittels ObjectOutputStream Netzwerkprogrammierung 12
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
x46 Socket Files per Socket verschicken Netzwerkprogrammierung 1
platofan23 Probleme mit Socket bei Android Studio? Netzwerkprogrammierung 22
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
D new ObjectInputStream(socket.getInputStream()); Netzwerkprogrammierung 15
E Socket Frage Netzwerkprogrammierung 6
D ServerSocket - Socket Verbindungsart Netzwerkprogrammierung 3
T Frage bzgl. Socket-API Netzwerkprogrammierung 1
F TCP Socket auf Verbindungsabbruch prüfen Netzwerkprogrammierung 15
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
T Socket Socket connections schließen? Netzwerkprogrammierung 2
D Socket Socket OutputStream leeren? Netzwerkprogrammierung 3
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
F Socket Socket in anderen Methoden Netzwerkprogrammierung 1
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
I Socket Netzwerkprogrammierung 1
J 1 Socket - 2 Serversocket Netzwerkprogrammierung 4
F Socket Verbindungsaufbau abbrechen Netzwerkprogrammierung 3
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
Joew0815 socket event handler Netzwerkprogrammierung 2
F Einfache Socket Verbindung Netzwerkprogrammierung 2
A Socket Socket Receive-/SendBuffersize Netzwerkprogrammierung 0
D Socket server auf Smartphone Netzwerkprogrammierung 9
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
A Socket Socket Server netcat Netzwerkprogrammierung 1
Shams Anfängerfrage zu Server-Socket-Kommunikation Netzwerkprogrammierung 2
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
D Socket Error: java.lang.NullPointerException Netzwerkprogrammierung 1
D TCP Socket funktioniert nicht richtig Netzwerkprogrammierung 3
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
B SSL Socket Netzwerkprogrammierung 2
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
P Warum kann ich kein Socket aufbauen? Netzwerkprogrammierung 12
S Socket SSL Socket und Sun/Oracle Java Netzwerkprogrammierung 5
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
precoc Server Socket Start / Stop Netzwerkprogrammierung 5
N SOCKET mehrere Requests, keep Alive serverspezifisch? Netzwerkprogrammierung 3
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
C Socket Systemsperren mit Socket Netzwerkprogrammierung 4
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
D Socket Multithread-Socket | Kurz vor dem Ziel Netzwerkprogrammierung 7
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben