|
I can't found the copy's, help me
____________________________
Federico ValerÃn R.
Gerencia Sistemas C.A - Desarrollo Tarjetas
BAC | CREDOMATIC Network
Tel: (506) 295-9381
Fax: (506) 255-2168
E-mail: fvalerin@xxxxxxxxxxxxxx
vince vince
<levince@xxxxxxxx
m> To
Sent by: rpg400-l@xxxxxxxxxxxx
rpg400-l-bounces@ cc
midrange.com
Subject
Using JAVA Socket in RPG ILE
03/11/2004 06:45
a.m.
Please respond to
RPG programming
on the AS400 /
iSeries
<rpg400-l@midrang
e.com>
I made a RPG program calling some Java API below:
Ë
**********************************************************************
* To Compile:
*
* CRTBNDRPG PGM(xxx/EXOSOCKET) SRCFILE(xxx/QRPGLESRC)
*
Ë
**********************************************************************
H DftActGrp(*NO) ActGrp(*CALLER)
/Copy vhetlib/QRPGLESRC,MATHPR
/Copy vhetlib/QRPGLESRC,SOCKPR
/Copy vhetlib/QRPGLESRC,OSTREAMPR
/Copy vhetlib/QRPGLESRC,ISTREAMPR
D IPadr C Const('172.23.1.38')
D Hello C Const('hello\n')
D Port S 10I 0
D tmpIS S O
Class(*JAVA:'java.io.InputStream')
D tmpOS S O
Class(*JAVA:'java.io.OuputStream')
D string1 S O
Class(*JAVA:'java.lang.String')
D string2 S O
Class(*JAVA:'java.lang.String')
D Sum S O
Class(*JAVA:'java.math.BigDecimal')
D BigD1 S O
Class(*JAVA:'java.math.BigDecimal')
D BigD2 S O
Class(*JAVA:'java.math.BigDecimal')
D StringSum S O
Class(*JAVA:'java.lang.String')
D DisplaySum S 30A Varying
****************************
D Sock1 S O
Class(*JAVA:'java.net.Socket')
D is S O Class(*JAVA:
D
'java.io.InputDataStream')
D os S O Class(*JAVA:
D
'java.io.OutputDataStream')
****************************
C Eval String1 = newString(IPadr)
C Eval String2 = newString(Hello)
C z-add 9999 Port
C Eval Sock1 = newSocket(String1 : Port)
C Eval DisplaySum = getBytes(String2)
C DisplaySum Dsply
/free
monitor;
tmpOS=getOutput(Sock1);
tmpIS=getInput(Sock1);
os=newOSTREAM(tmpOS);
is=newISTREAM(tmpIS);
writeBytes(os : String2);
on-error *all;
endmon;
/end-free
C* Eval tmpOS = getOutput(Sock1)
C* Eval tmpIS = getInput(Sock1)
C* Eval os = newOSTREAM(tmpOS)
C* Eval is = newISTREAM(tmpIS)
****************************
C* CALLP writeBytes(os : String2)
****************************
C CALLP closeOS(os)
C CALLP closeIS(is)
C CALLP closeSocket(Sock1)
C Eval *InLr = *On
this program of course uses Java prototypes below:
**********************************************************************
* getBytes - Converts a string to a byte array for use in a char
field
**********************************************************************
D getBytes PR 30A ExtProc(*JAVA:
D 'java.lang.String':
D 'getBytes')
D Varying
**********************************************************************
* newString constructor that accepts a byte array
* (an alphnumeric variable in RPG speak). It
* returns a string object.
**********************************************************************
D newString PR O ExtProc(*JAVA:
D 'java.lang.String':
D *CONSTRUCTOR)
D
Class(*JAVA:'java.lang.String')
D byes 30A Const Varying
**********************************************************************
**********************************************************************
D newSocket PR O ExtProc(*JAVA:
D 'java.net.Socket':
D *CONSTRUCTOR)
D
Class(*JAVA:'java.net.Socket')
D Host O
Class(*JAVA:'java.lang.String')
D PortNumber 10I 0 VALUE
**********************************************************************
D getOutput PR O ExtProc(*JAVA:
D 'java.net.Socket':
D 'getOutputStream')
D
Class(*JAVA:'java.io.OutputStream')
**********************************************************************
D getInput PR O ExtProc(*JAVA:
D 'java.net.Socket':
D 'getInputStream')
D
Class(*JAVA:'java.io.InputStream')
**********************************************************************
D closeSocket PR ExtProc(*JAVA:
D 'java.net.Socket':
D 'close')
*********************************************************************
D newOSTREAM PR O ExtProc(*JAVA:
D
'java.io.DataOutputStream':
D *CONSTRUCTOR)
D Class(*JAVA:'java.io.Data+
D OutputStream')
D os O
Class(*JAVA:'java.io.OutputStream')
**********************************************************************
D*ISTREAM PR O ExtProc(*JAVA:
D* 'java.io.OutputStream':
D* *CONSTRUCTOR)
D* Class(*JAVA:'java.io.Data+
D* OutputStream')
D* os O
Class(*JAVA:'java.io.OutputStream')
**********************************************************************
D writeBytes PR ExtProc(*JAVA:
D
'java.io.DataOutputStream':
D 'writeBytes')
D ostr O
Class(*JAVA:'java.lang.String')
**********************************************************************
D closeOS PR ExtProc(*JAVA:
D
'java.io.DataOutputStream':
D 'close')
*********************************************************************
D newISTREAM PR O ExtProc(*JAVA:
D
'java.io.DataInputStream':
D *CONSTRUCTOR)
D Class(*JAVA:'java.io.Data+
D InputStream')
D os O
Class(*JAVA:'java.io.InputStream ')
**********************************************************************
D readLine PR O ExtProc(*JAVA:
D
'java.io.DataInputStream':
D 'readLine')
D
Class(*JAVA:'java.lang.String ')
**********************************************************************
D closeIS PR ExtProc(*JAVA:
D
'java.io.DataInputStream':
D 'close')
*********************************************************************
Now with this program runs a server program on a remote PC (code below):
import java.io.*;
import java.net.*;
public class echo3 {
public static void main(String args[]) {
// declaration section:
// declare a server socket and a client socket for the server
// declare an input and an output stream
ServerSocket echoServer = null;
String line;
DataInputStream is;
PrintStream os;
Socket clientSocket = null;
// Try to open a server socket on port 9999
// Note that we can't choose a port less than 1023 if we are not
// privileged users (root)
System.out.println("Server launched\n");
try {
echoServer = new ServerSocket(9999);
}
catch (IOException e) {
System.out.println(e);
}
// Create a socket object from the ServerSocket to listen and accept
// connections.
// Open input and output streams
try {
clientSocket = echoServer.accept();
System.out.println("connected \n");
is = new DataInputStream(clientSocket.getInputStream());
os = new PrintStream(clientSocket.getOutputStream());
// As long as we receive data, echo that data back to the client.
while (true) {
line = is.readLine();
os.println(line);
if(line!=null)
{
System.out.println(line);
}
}
}
catch (IOException e) {
System.out.println(e);
}
}
}
this program does work.
But I got some errors on eSerie:
Message . . . . : Application error. MCH74A5 unmonitored by QJVAJNI at
statement 0000002709, instruction X'0000'.
and my RPG program doesn't work while a pure JAVA program running on
the same eSerie works (see below):
import java.io.*;
import java.net.*;
public class smtpClient {
public static void main(String[] args) {
// declaration section:
// smtpClient: our client socket
// os: output stream
// is: input stream
Socket Socket1 = null;
DataOutputStream os = null;
DataInputStream is = null;
// Initialization section:
// Try to open a socket on port 9999
// Try to open input and output streams
try {
Socket1 = new Socket("172.23.1.38", 9999);
os = new DataOutputStream(Socket1.getOutputStream());
is = new DataInputStream(Socket1.getInputStream());
} catch (UnknownHostException e) {
System.out.println("Don't know about host: hostname");
} catch (IOException e) {
System.out.println("Couldn't get I/O for the connection
to: hostname");
}
if (Socket1 != null && os != null && is != null) {
try {
// The capital string before each colon has a special meaning to SMTP
// you may want to read the SMTP specification, RFC1822/3
os.writeBytes("HELO\n");
os.writeBytes("Hi there\n");
os.writeBytes("ok\n");
// keep on reading from/to the socket till we receive the "Ok",
// once we received that then we want to break.
String responseLine;
while ((responseLine = is.readLine()) != null) {
System.out.println("Server: " + responseLine);
if (responseLine.indexOf("Ok") != -1) {
break;
}
}
// clean up:
// close the output stream
// close the input stream
// close the socket
os.close();
is.close();
Socket1.close();
} catch (UnknownHostException e) {
System.err.println("Trying to connect to unknown host: " +
e);
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}
}
}
If someone has a idea of what is wrong with my program tell me, but
maybe it would first be useful for me to know how I can handled this
exception in order to know where are mistakes.
Thanks for you help.
And sorry for my bad english.
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.