# Applikation Verarb (Server) -  Applet als Darstell (Client)



## lyrics (18. Jul 2005)

Hallo Zusammen,

ich hoffe jemand von euch kann mir eine Antwort geben. Einen ähnnlichen Thread habe ich nicht gefunden, sollte einer existieren, könnt Ihr diesen Thread ja schliesen und nur eben den Link einfügen.

Folgendes Problem habe. Ich habe eine Applikation geschrieben, die auch einwandfrei läuft. Jetzt möchte ich aber das ganze auch übers Internet abrufen können. Dabei möchte ich aber nicht die ganze Anwendung in ein Applet ändern.

Ich möchte das so realisieren, das die komplette Verarbeitung des Programms auf den Server läuft. Der Server bekommt die aktion des Anwenders, verarbeitet die nötigen Anweisungen und schickt lediglich ein Abbild des Fensters zum Applet.

Die Applikation auf den Server muss ja demnach eine Schnittstelle beinhalten, die vorgibt, das direkt ein Anwender damit arbeitet. Diese Schnittstelle schickt dann die Fertigen Panals zum Client der diese dann in das Applet Fenster ausgibt.

Hat jemand schon mal Erfahrung mit dieser Problematik gehabt, oder kann mir jemand Tipps zu dem Thema geben?

Besten Dank schon mal im voraus.

Gruß

lyrics


----------



## Bleiglanz (18. Jul 2005)

google mal nach "thinlet"


----------



## L-ectron-X (18. Jul 2005)

Soll das ein Programm für den Remote-Zugriff, also etwas ähnliches wie eine Fernwartung werden?
Es gibt schon fertige Programme, auch welche, die in Java geschrieben wurden.
Hier mal eins inkl. Quelltext: http://www.tightvnc.com


----------



## lyrics (18. Jul 2005)

@L-ectron-X
Nein keine Vernwartung. Mein Problem ist das ich die komplette Anwendung als Applikation entwickelt habe. Jedoch möchte ich ohne riesen Anpassungen das ganze in ein Applet stellen. Da die Anwendung ziemlich viele DB Zugriffe hat, soll die KOmplette Verarbeitung auf dem Server laufen. Es soll letztlich nur die Darstellung übertragen werden. Es  soll auch möglich sein das mehrere Personen gleichzeitig Zugreifen können.

Auf dem Server soll eine Schnittstelle stehen, die dem Programm einen User vorgaukelt. Wird ein Button im Applet beim Client gedrückt, wird die Maske zum Server geschickt. Die Schnittstelle geht letztlich hin die einzelnen Felder auszulesen, in die Maske auf den Server zu schreiben und den Button zu betätigen, den der User gedrückt hat. 

Mit dieser Lösung brauche ich nur die Schnittstelle einbinden und das Applet erstellen.


----------



## freez (23. Jul 2005)

hm, du willst komplette Panels übers Internet übertragen?

Dazu würde mir nur das Stichwort Serilisation einfallen. Du schreibst dir einen Server, der auf ne Connection wartet ... der Server nimmt die Daten vom Applet an, verarbeitet diese, und erstellt das Panel ... allerdings habe ich noch nie Objekte übers Netz übertragen. Deswegen ist das nur ein Schuss ins blaue. Wobei, wenn man Objekte auf Platte schreiben kann, wieso dann nicht auch übers Netz übertragen. Wäre ein Versuch wert. Schau mal nach ObjectOutputStream und ObjectInputStream. Vielleicht können diese Klassen auch übers Netz Daten übertragen. Damit könntest du theoretisch komplette Panels schicken.


----------



## freez (23. Jul 2005)

So, ich habe mal schnell das mit den Objekten übertragen ausprobiert. Funktioniert super.

Hier habe ich mal ein komplettes Frame übertragen:

Client:


```
import java.awt.Frame;
import java.awt.HeadlessException;
import java.awt.Label;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/*
 * Erstellt am 23.07.2005 18:37:11 
 *
 * TODO 
 */

/**
 * @author denis
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class objectStreams extends Frame
{
	Label lbl = new Label("TEST");

	/**
	 * @throws java.awt.HeadlessException
	 */
	public objectStreams() throws HeadlessException
	{
		super("TEST");
		this.add(lbl);
		this.setSize(100,100);
		this.show();
	}
	public static void main(String[] args)
	{
		objectStreams test = new objectStreams();
		
		Socket client;
		try
		{
			client = new Socket("localhost", 4444);
			OutputStream os = client.getOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(os);
			oos.writeObject(test);
			oos.close();
			os.close();
			client.close();
		}
		catch (UnknownHostException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}
```

Und hier der Server:


```
import java.awt.Frame;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ObjectServer
{
  public static void main (String [] args) throws IOException
  {
     System.out.println (">>> Server wird gestartet");

     ServerSocket serverSocket = new ServerSocket (4444);
     System.out.println("2");
     Socket clientSocket = serverSocket.accept();
     System.out.println("3");
     ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
     
     System.out.println("4");
     System.out.println ("--> angemeldet: " + clientSocket.getLocalAddress());
     
     try
	{
		Object o = in.readObject();
		Frame frame = (Frame) o;
		frame.show();
		Thread.sleep(10000);
	}
	catch (IOException e)
	{
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	catch (ClassNotFoundException e)
	{
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	catch (InterruptedException e)
	{
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
     
     
     System.out.println ("<-- abgemeldet: " + clientSocket.getLocalAddress());

     clientSocket.close();
  }
}
```


----------

