PDA

View Full Version : RPG: Client Infos lesen?



Seiten : [1] 2 3

robertki
16-01-07, 09:48
Hallo,

mittlerweile habe ich schon ein paar Programme in RPG geschrieben und es klappt ganz gut. Nun habe ich folgendes Problem:

Gibt es eine Möglichkeit (API oder so), wie ich Informationen über den angemeldeten Client, die Session oder das Client OS auslesen kann? Also der User meldet sich über 5250 an der AS400 an und startet ein RPG Prog. Bis jetzt habe ich nur die IP gefunden.

Robert

Fuerchau
16-01-07, 10:05
Nein, da gibts keine Möglichkeit.

Per Socket-Programmierung kann man ggf. versuchen Kontakt mit dem Client aufzunehmen, was durch Firewalls zunehmend erschwert wird.
Welchen Port man da nehmen muss unterscheidet sich dann von Client zu Client, ich habe da keine Ahnung.

Da es keine Regeln hierfür gibt hast du da keine Chance.

Möglichkeiten gibts da nähmlich viele und im Endeffekt landest du gar an der falschen Stelle.
Beispiel HOB:
HOB stelle einen Server zur Verfügung auf dem die 5250-Sitzungen laufen. Die Clients werden dann über Inter-/Intranet mit diesem Server verbunden. Der AS/400 ist per IP nur der Server bekannt. Mit anderen Worten, für alle User gibts die selbe IP.

Und: wofür soll es gut sein ?

robertki
16-01-07, 10:11
Nein, da gibts keine Möglichkeit.

Per Socket-Programmierung kann man ggf. versuchen Kontakt mit dem Client aufzunehmen, was durch Firewalls zunehmend erschwert wird.
Welchen Port man da nehmen muss unterscheidet sich dann von Client zu Client, ich habe da keine Ahnung.

Da es keine Regeln hierfür gibt hast du da keine Chance.

Möglichkeiten gibts da nähmlich viele und im Endeffekt landest du gar an der falschen Stelle.
Beispiel HOB:
HOB stelle einen Server zur Verfügung auf dem die 5250-Sitzungen laufen. Die Clients werden dann über Inter-/Intranet mit diesem Server verbunden. Der AS/400 ist per IP nur der Server bekannt. Mit anderen Worten, für alle User gibts die selbe IP.

Und: wofür soll es gut sein ?

Hallo Fuerchau,

danke für die schnelle Antwort. Na das hört sich nicht so toll an.

Wir nutzen Handscanner mit der AS400 und ich würde gerne wissen, ob nun ein Scanner oder ein PC angemeldet ist. Am Benutzer und IP könnte man es festmachen, hat aber nicht so viel Sinn - ändert sich des öfteren. Wir nutzen immer den selben Port für alle 5250 Verbindungen. Kann ich damit etwas machen? Eigentlich dachte ich wäre dies einfacher. Bin wohl zu sehr Java und C verwöhnt ;-)

Robert

Fuerchau
16-01-07, 10:15
Tja, genau hier ist der einzige Ansatz.
Schreibe ein Java-/C-Programm für die Clients, von denen du die Info benötigst. Dieses kann per IP auf einen Anfrage warten (Firewall/Port).

Von der AS/400 fragst du dann über die ermittelte IP die Info vom Client ab.
Keine Antwort => Unbekanntes Gerät.

robertki
16-01-07, 10:19
Tja, genau hier ist der einzige Ansatz.
Schreibe ein Java-/C-Programm für die Clients, von denen du die Info benötigst. Dieses kann per IP auf einen Anfrage warten (Firewall/Port).

Von der AS/400 fragst du dann über die ermittelte IP die Info vom Client ab.
Keine Antwort => Unbekanntes Gerät.

Hätte es gerne nur aus dem rpg prog gemacht, aber wenns nicht klappt! Muss ich mir mal überlegen, ob das eine gute Idee ist. Denn sobald das Prog nicht läuft, kann ich mir ja nicht sicher sein, um welchen Client es sich handelt. Schade. Besten Danke Fuerchau

Robert

TARASIK
16-01-07, 15:35
Hallo Robert,
vielleicht helfen Dir da die Client APIs ?

z.B.:

http://www-1.ibm.com/support/docview.wss?uid=nas1c1b64ea158daea4a862565c2007cb2 d7&rs=110

TARASIK
16-01-07, 15:41
Hallo Robert,
hier noch einen Link:
http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/QDCRDEVD.htm

Fuerchau
16-01-07, 15:43
DAS war es leider nicht.
Er möchte von der AS/400 aus die OS-Version des 5250-Clients herausfinden und zwar egal ob das CA, Rumba, Mocha oder nur Telnet ist.

Vom Client aus das OS der AS festzustellen reicht schon SQL (DBMS-Version).

TARASIK
16-01-07, 15:48
aber es gibt doch z.B. das QDCRDEVD API mit diesem kann ich
doch die verschiedensten Informationen bekommen. (wie in dem API LINK beschrieben)

z.B.:

Retrieve the IP Address of a Connected Telnet Client
by Scott Klement
Club Tech iSeries Programming Tips Editor

January 15, 2006 —
Q: How can I retrieve the IP address of someone connected with Telnet? For example, if a user on my network uses iSeries Access to sign on to my iSeries from his or her desktop PC, can I retrieve that PC's IP address?
A: Yes, the Retrieve Device Description (QDCRDEVD) API can return the IP address of the computer that a given display device is connected to.
The QDCRDEVD API is documented in the iSeries Information Center at the following link:
http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/apis/QDCRDEVD.htm
The "Format name" parameter needs to be set to DEVD0600, because this is the format that contains information about display devices.
The "Device name" parameter should be set to the name of the device that you'd like to get the IP address for. If it's for the current interactive job, you can use the RTVJOBA command to get the device name.
For example, if you wanted to write a CL program that uses SNDUSRMSG to display the address of the 5250 client (i.e., the PC connected with iSeries Access) as well as the address of the iSeries itself, you could code the following:
PGM PARM(&DEV)

DCL VAR(&DEV) TYPE(*CHAR) LEN(10)
DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(1000)
DCL VAR(&RCVVARLEN) TYPE(*CHAR) LEN(4)
DCL VAR(&ERRCODE) TYPE(*CHAR) LEN(8) VALUE(X'00000000')
DCL VAR(&PC) TYPE(*CHAR) LEN(15)
DCL VAR(&ISERIES) TYPE(*CHAR) LEN(15)

IF (&DEV *EQ '*CURRENT') DO
RTVJOBA JOB(&DEV)
ENDDO

CHGVAR VAR(%BIN(&RCVVARLEN)) VALUE(1000)

CALL PGM(QDCRDEVD) PARM( &RCVVAR +
&RCVVARLEN +
'DEVD0600' +
&DEV +
&ERRCODE )

CHGVAR VAR(&PC) VALUE(%SST(&RCVVAR 878 15))
CHGVAR VAR(&ISERIES) VALUE(%SST(&RCVVAR 958 15))

SNDUSRMSG MSG('5250 client has IP address' *BCAT &PC) +
MSGTYPE(*INFO)

SNDUSRMSG MSG('iSeries has IP address' *BCAT &ISERIES) +
MSGTYPE(*INFO)

ENDPGM
If you call that program with a parameter of *CURRENT, it looks up the current interactive session. Otherwise, it expects the parameter to be the name of the device that you want to get the address of.
For example, to find the current interactive program's IP address, I could type:
CALL PGM(GETIP) PARM('*CURRENT')
If I want to know the DSP01 session's IP address, I could type the following, instead:
CALL PGM(GETIP) PARM('DSP01')
If you want to use those IP addresses in your program, it should be an easy modification to return the addresses as parameters.

Fuerchau
16-01-07, 16:01
Ja, die IP-Adresse hat er doch schon.
Aber wie willst du nun mit dieser IP die OS-Version des Gegenüber erfragen ?