Forum Clubic

[java] detecter un pb réseau

bonsoir,

j ai un programme java qui fonctionne tres bien qui récupère des données en temps réel sur un système distant via réseau TCP/IP.

Le problème est quand ce système distant redemarre (opération de maintenant ou qqch de ce genre), le programme reste coincé …et il faut l arreter et le relancé manuellement pour qu il reparte.

Comment peut il se relancer seul?

merci d’avance

personne ne voit une solution possible?

je ne sais pas ce que tu utilise, mais avec des socket (de mémoire) il y a une méthode isConnected() pour savoir si la connexion est active.
http://java.sun.com/j2se/1.5.0/docs/api/in…/Line.Info.html

je suis plutot parti sur une autre solution:
ping en série jusqu a que j ai une déconnexion

j ai trouvé un code pour ca


/*
 * Main.java
 *
 * Created on 23 mars 2007, 20:36
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
import java.net.*;
import java.io.*;
import java.lang.String;
/**
 *
 * @author Florent
 */
class Ping {

            static int port = 6752;
               
    public static void main (String[] args) {
        try {
            if (args.length == 0) {

                // -------------- R'epondre aux pings

                DatagramSocket sock = new DatagramSocket (port);
                while (true) {
                    pong (sock);
                }

            } else if (args.length == 1) {

                // ------------- Faire des pings.

                DatagramSocket sock = new DatagramSocket (port+1);
                // Un port différent permet de tester sur la m^eme machine.
                InetAddress ip = InetAddress.getByName (args[0]);
                // Tous les paquets seront envoy'es vers et recus de :
                sock.connect (ip, port);
                sock.setSoTimeout(1);
                while (true) {
                    try {
                        ping (sock);
                    } catch (SocketTimeoutException e) {
                        System.out.println ("la reponse tarde");
                    }
                    Thread.sleep (1000);
                }

            } else {
                throw new Exception ("Usage:\n java Ping : r'epond aux pings.\n java Ping ip :  fait des pings vers l'adresse ip.\n");
            }

        } catch (SocketException e) {
            System.err.println ("Port " + port
                            + " ou " + (port+1) + " déjà pris ?");
        } catch (UnknownHostException e) {
            System.err.println ("Machine inconnue : " + args[0]);
        } catch (Exception e) {
            System.err.println (e);
        }
    }

    static byte[] buf = new byte [512];
    static DatagramPacket p = new DatagramPacket (buf, 512);

    static void pong (DatagramSocket sock) throws IOException {
        sock.receive (p);
        InetAddress ip = p.getAddress ();
        int port = p.getPort ();
        int count = readInt16 (buf, 0);
        System.out.println ("ping " + count + " from " + ip + ":" + port);
        // On renvoie p `a l'exp'editeur :
        p.setAddress (ip);
        p.setPort (port);
        sock.send (p);
    }

    static int count = 0;

    static void ping (DatagramSocket sock) throws IOException {
        // buf est le contenu de p
        writeInt16 (buf, 0, count);
        sock.send (p);
        System.out.println ("ping " + count + " envoy'e");
        // Incr'ementer le compteur :
        count++;
        // On attend le retour :
        sock.receive (p);
        int count = readInt16 (buf, 0);
        System.out.println ("     " + count + " bien re,cu");
    }

    static void writeInt8 (byte[] buf, int pos, int i) {
	buf [pos] = (byte) i;
    }

    static void writeInt16 (byte[] buf, int pos, int i) {
	writeInt8 (buf, pos, i / 256); // high order byte first = big endian
	writeInt8 (buf, pos+1, i % 256);        
    }

    static int readInt8 (byte[] buf, int pos) {
	return (256 + buf [pos]) % 256;
    }

    static int readInt16 (byte[] buf, int pos) {
	return 256 * readInt8 (buf, pos) + readInt8 (buf, pos+1);
    }

   }

Par contre il y a un truc qui me dérange…je vois a plusieurs reprise la variable ip qui apparait…mais on la rentre nul part!

De plus quand on lance le programme il demande:
'Run : ’

Et run quoi?

personne ne voit?

la variable ip est un objet de type InetAddress.

je crois me souvenir que tu utilises Netbeans. C’est donc normal qu’il t’affiche en continue ‘Run’. Quand tu lance une appli depuis cette ide, la console est en fait l’ide elle même. De ce fait les sorties et entrées standard (in et out) sont lues et ecrites dans la fenetre.
Exemple : quand tu fais System.out.println(“qqch”); , ce texte apparait dans l’ide.
Lorsqu’une appli se termine, tu obtien des infos comme le temps d’exécution.

mais qu es ce qu’attend ce “run”?
J’ai essaye en passant non pas par Netbeans mais directement avec le fichier .jar et en ligne de commande…mais il me fait pas grand choses non plus

j ai meme remplacé le InetAdress ip par :
InetAddress ip = InetAddress.getByName ("192.168.120.2") ;

le tout pour bien choisir l’adresse a pinguer mais rien n’y fait

de plus je n ai jamais le message System.out.println ("la reponse tarde") ; ou encore les différents ping qui sont fait