Bonjour,
Voici le code que j ai récupéré sur internet pour l’exécution du ping:
import java.net.* ;
import java.io.* ;
class Ping {
static int port = 6758 ;
public static void main (String[] args) {
try {
if (args.length == 0) {
// -------------- Repondre 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 meme machine.
InetAddress ip = InetAddress.getByName ("serveur") ;
// Tous les paquets seront envoyes 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 : repond 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'expediteur :
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 + " envoye") ;
// Incr'ementer le compteur :
count++ ;
// On attend le retour :
sock.receive (p) ;
int count = readInt16 (buf, 0) ;
System.out.println (" " + count + " bien recu") ;
}
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) ;
}
}
Au niveau de l’ip, je lui ai dit de récupérer l’adresse du serveur. Mais quand je le lance le programme avec Eclipse rien ne se passe…
Ai je oublié quelque chose?
merci d’avance
Dans un second temps:
Lors de la non détection du ping, je voudrais arreter un programme (voire 2) puis les relancer.
Problème:
Ces programmes sont du java, donc pour les arreter soit j’arrete tous les processus javaw présent, soit je les ferme les un après les autres.
Mais si je ferme javaw, fe ferme aussi le gestionnaire du ping iniateur de cette fermeture.
comment puis je faire? y a t il une solution?
merci
Edité le 21/08/2007 à 08:41