Vous n'êtes pas identifié(e).
Bonjour,
Quelqu'un aurait il une idée du moyen pour récupérer dans un CLP ou RPG (peu importe) le résultat positif ou négatif de la commande PING RMTSYS ('xxx.xxx.xxx.xxx')
Merci pour vos réponses
Fabrice
Dernière modification par Fabrice (2011-12-13 12:32:41)
Hors ligne
Programme que j'avais fait en 2004 :
PGM (&HOST &RET)
/* ----------------------------------------------------------------- */
/* PROGRAMME DE TEST D'UNE ADRESSE IP */
/* Ce programme retourne '0' si OK */
/* Ce programme retourne '1' si Erreur */
/* ----------------------------------------------------------------- */
/* Date !Auteur! Nature des modifications */
/* ---------!------!------------------------------------------------ */
/* / / ! ! */
/* ----------------------------------------------------------------- */
DCL &HOST *CHAR 20
DCL &RET *CHAR 1
DCL &DTAID *CHAR 7
DCL &DTAMSG *CHAR 80
DCL &DTADTA *CHAR 20
DCL &CHAR3 *CHAR 3
DCL &POUR1 *CHAR 4
DCL &POUR2 *DEC ( 4 0)
DCL &POUR3 *DEC ( 4 0)
DCL &MSGQ *CHAR 10
/* RECUP % MINI DE REUSSITE DE 1 A 3 */
/* RECUP MSGQ D'ENVOI DE 4 A 13 */
RTVDTAARA (SGSPNGC1 ( 1 3)) &CHAR3
MONMSG CPF0000 *N CHGVAR &CHAR3 '075'
RTVDTAARA (SGSPNGC1 ( 4 10)) &MSGQ
MONMSG CPF0000
/* SI % = *NO, PAS DE CONTROLE */
IF (&CHAR3 = '*NO') DO
CHGVAR &RET '0'
RETURN
ENDDO
CHGVAR &POUR3 &CHAR3
MONMSG CPF0000
/* TESTE L'ADRESSE IP */
PING &HOST
MONMSG (TCP0000 CPF0000)
/* CONTROLE LE POURCENTAGE DE REUSSITE */
RCVMSG PGMQ(*SAME) MSGTYPE(*LAST) RMV(*NO) +
MSGID(&DTAID) MSG(&DTAMSG) MSGDTA(&DTADTA)
MONMSG CPF0000 *N GOTO ERREUR
IF (&DTAID ^= 'TCP3210') GOTO ERREUR
CHGVAR &POUR1 %BIN(&DTADTA 9 4)
CHGVAR &POUR2 &POUR1
IF (&POUR2 < &POUR3) GOTO ERREUR
/* Fin de programme */
CHGVAR &RET '0'
RETURN
ERREUR:
IF (&MSGQ = '*PGMQ') DO
SNDPGMMSG MSGID(TCP3204) MSGF(QTCPMSG) MSGDTA(&HOST)
MONMSG CPF0000
SNDPGMMSG MSG(&DTAMSG)
MONMSG CPF0000
ENDDO
IF (&MSGQ ^= '*PGMQ' *AND &MSGQ ^= ' ') DO
SNDUSRMSG MSGID(TCP3204) MSGF(QTCPMSG) MSGDTA(&HOST) +
TOMSGQ(&MSGQ) MSGTYPE(*INFO)
MONMSG CPF0000
SNDUSRMSG MSG(&DTAMSG) TOMSGQ(&MSGQ) MSGTYPE(*INFO)
MONMSG CPF0000
ENDDO
CHGVAR &RET '1'
ENDPGMHors ligne
Maintenant si tu veux tester un service particulier/port, car peut-être ta machine distante est présente mais que le service attendu n'est pas démarré, dans ce cas tu peux t'appuyer sur l'utilitaire CHKTCPSVR qu'à réalisé Scott :
http://www.systeminetwork.com/article/s … s-up-63863
Patrick
Hors ligne
Merci à tous ; j'ai trouvé mes réponses !
Hors ligne
Bonjour,
Dans le CLP en exemple, le dernier message est récupéré pour retrouver le %.
Est il envisageable de retrouver les messages précédents envoyé suite au PING ?
Merci
Fabrice
Hors ligne
Il suffit d'effectuer plusieurs RCVMSG pour récupérer les messages TCP3203 ou TCP3204 et suivants.
Mais le but de ce programme était justement de retourner un simple indicateur OK ou non ...
Hors ligne
J'ai une difficulté à récupérer précisément le message PING reply 1 from x.x.x.x took 1 ms. 256 bytes. TTL 128. pour récupérer le nombre de ms
L'ID est TCP3215.
Est ce possible ?
Merci
Hors ligne
J'ai trouvé ; avec recup de KEY et RCVMSG en *PRV
Hors ligne
Programme modifié pour ressortir le temps
PGM (&HOST &RET &TEMPS)
/* ----------------------------------------------------------------- */
/* PROGRAMME DE TEST D'UNE ADRESSE IP */
/* Ce programme retourne '0' si OK */
/* Ce programme retourne '1' si Erreur */
/* ----------------------------------------------------------------- */
/* Date !Auteur! Nature des modifications */
/* ---------!------!------------------------------------------------ */
/* 29/11/11 ! GAP3 ! Temps récupéré */
/* ----------------------------------------------------------------- */
DCL &HOST *CHAR 20
DCL &RET *CHAR 1
DCL &TEMPS *CHAR 3
DCL &DTAID *CHAR 7
DCL &DTAMSG *CHAR 80
DCL &DTADTA *CHAR 20
DCL &CHAR3 *CHAR 3
DCL &POUR1 *CHAR 4
DCL &POUR2 *DEC ( 4 0)
DCL &POUR3 *DEC ( 4 0)
DCL &MSGQ *CHAR 10
DCL &MSGK1 *CHAR 4
DCL &MSGK2 *CHAR 4
/* RECUP % MINI DE REUSSITE DE 1 A 3 */
/* RECUP MSGQ D'ENVOI DE 4 A 13 */
RTVDTAARA (SGSPNGC1 ( 1 3)) &CHAR3
MONMSG CPF0000 *N CHGVAR &CHAR3 '075'
RTVDTAARA (SGSPNGC1 ( 4 10)) &MSGQ
MONMSG CPF0000
/* SI % = *NO, PAS DE CONTROLE */
IF (&CHAR3 = '*NO') DO
CHGVAR &RET '0'
RETURN
ENDDO
CHGVAR &POUR3 &CHAR3
MONMSG CPF0000
/* TESTE L'ADRESSE IP */
PING &HOST
MONMSG (TCP0000 CPF0000)
/* CONTROLE LE POURCENTAGE DE REUSSITE */
RCVMSG PGMQ(*SAME) MSGTYPE(*LAST) RMV(*NO) KEYVAR(&MSGK1) +
MSGID(&DTAID) MSG(&DTAMSG) MSGDTA(&DTADTA)
MONMSG CPF0000 *N GOTO ERREUR
IF (&DTAID ^= 'TCP3210') GOTO ERREUR
CHGVAR &POUR1 %BIN(&DTADTA 9 4)
CHGVAR &POUR2 &POUR1
IF (&POUR2 < &POUR3) GOTO ERREUR
/* Récupère le temps du ping */
RCVMSG PGMQ(*SAME) MSGTYPE(*PRV) RMV(*NO) +
MSGKEY(&MSGK1) KEYVAR(&MSGK2) +
MSGID(&DTAID) MSG(&DTAMSG) MSGDTA(&DTADTA)
MONMSG CPF0000 *N GOTO ERREUR
IF (&DTAID ^= 'TCP3211') GOTO ERREUR
CHGVAR &MSGK1 &MSGK2
RCVMSG PGMQ(*SAME) MSGTYPE(*PRV) RMV(*NO) +
MSGKEY(&MSGK1) KEYVAR(&MSGK2) +
MSGID(&DTAID) MSG(&DTAMSG) MSGDTA(&DTADTA)
MONMSG CPF0000 *N GOTO ERREUR
IF (&DTAID ^= 'TCP3215') GOTO ERREUR
CHGVAR &TEMPS %BIN(&DTADTA 1 4)
/* Fin de programme */
CHGVAR &RET '0'
RETURN
ERREUR:
IF (&MSGQ = '*PGMQ') DO
SNDPGMMSG MSGID(TCP3204) MSGF(QTCPMSG) MSGDTA(&HOST)
MONMSG CPF0000
SNDPGMMSG MSG(&DTAMSG)
MONMSG CPF0000
ENDDO
IF (&MSGQ ^= '*PGMQ' *AND &MSGQ ^= ' ') DO
SNDUSRMSG MSGID(TCP3204) MSGF(QTCPMSG) MSGDTA(&HOST) +
TOMSGQ(&MSGQ) MSGTYPE(*INFO)
MONMSG CPF0000
SNDUSRMSG MSG(&DTAMSG) TOMSGQ(&MSGQ) MSGTYPE(*INFO)
MONMSG CPF0000
ENDDO
CHGVAR &RET '1'
ENDPGMNote : J'ai copié/collé mon post précédent et modifié directement en tapant ma réponse.
J'ai peut-être fait une erreur quelquepart, mais le principe est là.
RCVMSG *LAST pour récupérer le TCP3210,
RCVMSG *PRV 2 fois pour récupérer le TCP3215
Dernière modification par GAPIII (2011-11-29 18:17:05)
Hors ligne