Input - outputstreams

Hallo,

ich habe folgendes prob:

ich habe ein serverprog geschrieben welches - wenn ein client sich damit verbindet - einen thread aufmacht welcher dann ein anderes prog startet. nun möchte ich die ausgaben dieses vom thread aufgerufenen progs irgendwie an den client zurück geben… nur wie??? sollte doch eigentlich irgendwie mit objectstreams gehen… hat jmd. evtl. sogar ein bsp.??

ich habe ein serverprog geschrieben welches - wenn ein client
sich damit verbindet - einen thread aufmacht welcher dann ein
anderes prog startet. nun möchte ich die ausgaben dieses vom
thread aufgerufenen progs irgendwie an den client zurück
geben… nur wie??? sollte doch eigentlich irgendwie mit
objectstreams gehen… hat jmd. evtl. sogar ein bsp.??

An welchem Teil von dem Problem scheiterst du?

Die Ausgabe von dem Programm das der Server startest solltest du über einen Stream abfragen können (Process.getInputStream).

Wie du das zurückschickst hängt davon ab was du für eine Verbindung zum Client hast (Sockets, RMI etc.). Bei Sockets z. B. könntest du im Prinzip einfach die Daten von dem InputStream lesen und auf den Outputstream der Verbindung zum Client schreiben. Drumherum brauchst wahrscheinlich noch ein kleines Protokoll, damit der Client weiss was er zu erwarten hat.

Grüße, Robert

An welchem Teil von dem Problem scheiterst du?

Die Ausgabe von dem Programm das der Server startest solltest
du über einen Stream abfragen können (Process.getInputStream).

Wie du das zurückschickst hängt davon ab was du für eine
Verbindung zum Client hast (Sockets, RMI etc.). Bei Sockets z.
B. könntest du im Prinzip einfach die Daten von dem
InputStream lesen und auf den Outputstream der Verbindung zum
Client schreiben. Drumherum brauchst wahrscheinlich noch ein
kleines Protokoll, damit der Client weiss was er zu erwarten
hat.

Grüße, Robert

Ich habe eine „RPC-Verbindung“, die - natürlich - über Sockets läuft. Ich scheitere daran den stream an den client zu geben bzw. das der client sie entgegennimmt - der server kann sie ohne probs ausgeben…

Hier mal zum besseren Verständnis ein kurzer Ausschnitt aus dem Quellcode:

Server:

public void run()
{
String msg = „Server: Verbindung " + name;
System.out.println(msg + " hergestellt“);
Process p;
// Aufrufen des Programmes bei richtigem „befehl“…
try {

ObjectOutputStream oos =
new ObjectOutputStream (socket.getOutputStream());

ObjectInputStream ois =
new ObjectInputStream (socket.getInputStream());

String methodenName = (String)ois.readObject();
String returnWert = „Methode nicht gefunden“;

if(methodenName.equals(„Readsoft“))
{
String prog = „C:/Readsoft.bat“; // Name und Ort des Programms
p = Runtime.getRuntime().exec( prog );

BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String text = „“;
returnWert = „Nicht Erfolgreich beendet“;
while ((text = in.readLine()) != null) //Moeglichkeitsabfrage mit Zuweisung
{
/**
* hier soll die übergabe an Client stattfinden!!!
*/
}
}
oos.writeObject(returnWert); //Returnwert ausgeben…
ois.close();
oos.close();
}
catch(Exception e)
{
System.out.println(e);
}
this.destroy();
}
/**
* @return
*/
private String back()
{
return null;
}
}

Und hier der (noch nicht ganz fertige) Client:

public Client()
{
try
{
Socket server = new Socket ( „“, 7);

System.out.println ("RPC-Client kontaktiert Server " +
server.getInetAddress());

ObjectOutputStream os = new ObjectOutputStream (
server.getOutputStream());

ObjectInputStream is = new ObjectInputStream (
server.getInputStream());

System.out.println("Client Port: ");
System.out.println(server.getPort());

// Name der aufzurufenden Servermethode senden:
os.writeObject(„Readsoft“);
os.flush();

// Returnwert der aufgerufenen Servermethode empfangen
String returnWert = (String)is.readObject();

// Ergebnis anzeigen:
System.out.println("Server antwortet: "+returnWert);

while(!returnWert.equals(„Erfolgreich“))
{
try
{
System.out.println(returnWert);

}
catch(Exception a)
{
System.out.println(„Nicht Erfolgreich“);
System.exit(1);
}
}
}
catch (Exception e)
{
System.out.println ( "Keine Verbindung…\n Fehler: " + e );
}
}

Hallo Andreas,

Dann schreib einfach das was du vom Process liest auf den OutputStream deiner Socketverbindung (heisst oos bei dir).

Wenn der Prozess fertig ist, würde ich dem Client noch irgendwas zum Abschluss schicken, damit er weiss, dass er die Verbindung beenden kann oder was auch immer.

Grüße, Robert