# Applet mit Script steuern



## Chris_Bayern (7. Dez 2008)

Hallo zusammen,

ich hoffe ich bin hier richtig.
Ich suche ein applet, welches mir eine Verbindung zu einem Host auf einem bestimmten Port öffnet.
Hintergrundsituation:
Ich habe einen Xport (Ethernet<=>rs232-koppler) der auf Port 80 via http das Applet und auch ein paar html-Seiten zur Verfügung stellt.
Leider hat weder der Xport noch der, via rs232 angeschlossene Prozessor genügend Rechenleistung um http-Anfragen beantworten zu können, geschweige denn dynamisch html-Seiten generieren zu können.

Meine Idee ist nun, auf dem Port 80 des Xport eine HTML-Seite mit Java-Script bereit zu stellen, die Ihrerseits zur Kommunikation mit meinem Prozessor lediglich eine Datenverbindung also einen Socket zum Port 10001 öffnet. Hier werden lediglich Steuerbefehler direkt zur rs232-Schnittstelle, also zu meinem Prozessor übertragen.

Ich brauche also ein Applet, welches von einem Script in der HTML-Seite aufgerufen werden kann. Bei dem Aufruf möchte ich die zu sendenden Steuerzeichen übergeben, die dann an den Port 10001 ohne jeden HHTP-Header geschickt werden. Ein Timeout beendet diese Verbindung, wenn nicht innerhalt von 1 oder 2 Sec. eine Antwort kommt. Die Antwort muß natürlich dann auch wieder an mein Script in der HTML-Seite zurück gegeben werden können um Sie dort auszuwerten und die Webseeite entsprechend zu füllen.

Ich habe leider keinen blassen Schimmer von JAVA-Programmierung und komme hier deshalb nicht weiter. Gibt es hier jemanden der mir helfen kann?
Das Applet soll so lange einen ASCCII-Zeichen vom Port 10001 lesen, bis ein CR (ASCII 13) empfangen wurde und dann die Verbindung sofort beenden. Wenn nix kommt, dann nach 1 od. 2 Sec. mit entsprechender Rückgabe an das aufrufende Script beenden.
Mit dem darstellen der empfangenen Daten auf der Webseite komme ich klar, lediglich das Applet und dessen Aufruf vom JavaScript bereitet mir Kopfzerbrechen.

Bitte um Info, wenn ich mich unklar ausgedrückt haben sollte.

Bitte um Hilfe!

Danke schon mal im Voraus!

Gruß Christian

P.S. Wenn das ganze dann auch noch auf einem WindowsMobile-Browser funktioniert, dann wäre das obergenial, ist aber keine Voraussetzung


----------



## Gast2 (7. Dez 2008)

Moin,

wenn mich nicht alles Täuscht hat der XPort eine API bzw. der bindet Deine externe Schnittstelle als COMx ... im letzteren Fall brauchst Du nur die COM-Schnittstelle öffenen ... für die API wirst Du wahrscheinlich nur eine TCP-Verbindung zum Gerät herstellen müssen

Nachtrag:
Com-Port-Redirector

hand, mogel


----------



## Chris_Bayern (7. Dez 2008)

Diese Möglichkeit besteht, nur auf diese Art bekomme ich keine Verbindung zur Webseite. Ich muß die empfangenen Daten in der Webseite darstellen. Außerdem möchte ich nichts installieren. Wenn ich was installieren könnte, dann würde ich meinen C-Conpiler bemühen und das Problem wäre in 5 Minuten aus der Welt. 
Die GUI soll komplett als HTML-Darstellung per Webbrowser laufen, also auch Hardware unabhängig!

Trotzdem Danke für die Antwort!


----------



## Chris_Bayern (7. Dez 2008)

Hallo nochmal,

ich habe schon mal ein wenig mit Beispielen die ich im Internet gefunden habe herumexperimentiert, und habe mit folgendem Code eine Kommunikation zur RS232 des Xport aufbauen können.
Frage ist, wie bekomme ich das von mein Javascript eingebunden?

```
import java.net.*;
import java.io.*;
import java.applet.Applet;

public class Client extends Applet {
  int inbyte;
  static String outstring = new String("");

	Client() throws IOException {
  	Socket server = new Socket ("192.168.0.30", 10001);

    InputStream input = server.getInputStream();
    OutputStream output = server.getOutputStream();
    output.write( 105 ); // kleines i
    output.write( 13 );  //CR
    output.flush();
    server.setSoTimeout(2000);
    do {
      inbyte = input.read();
      outstring  += (char)inbyte;
    } while (inbyte != 13 );
    System.out.println( outstring );
    server.close();
    input.close();
    output.close();

	}

	public static void main (String[] args)
	{
	  try {
	    Client client = new Client();
	  } catch (IOException e) {
	    System.out.print(e);
	  }
  }
}
```
Wenn ich z.B. einen Button drücke soll das Applet eine, zu übergebende Variable statt des "i" senden.
Außerdem ist mir völlig schleierhaft, wie ich die Rückgabe des Applets in meinem Javascript weiter verarbeiten kann.

Bitte dringend um Hilfe!

Danke chon mal


----------



## Gast2 (7. Dez 2008)

Moin,

1. Erkläre mal bitte was Du genau machen möchtest.
2. Wieso muss es unbedingt ein Applet sein?


```
Socket server = new Socket ("192.168.0.30", 10001);
```
hängt hinter dieser IP der XPort ??


```
InputStream input = server.getInputStream();
OutputStream output = server.getOutputStream();
output.write( 105 ); // kleines i
output.write( 13 );  //CR
output.flush();
```
falls ja ... dann ist das ja noch einfacher mit der Kiste zu quatschen als ich dachte


```
server.setSoTimeout(2000);
```
das sollte eigentlich nach der Instanzierung und vor dem Binden des Servers an den Socvket passieren

hand, mogel


----------



## Chris_Bayern (7. Dez 2008)

Moin,

es muß kein Applet sein. Ich bin nur davon ausgegangen, dass eine Verbinung mit Javascript zu einem X-beliebigen Port nicht möglich wäre. Wenn doch, dann um so besser.
Was ich will, ist eigentlich ganz einfach:
Ich habe eine Webseite mit z. B. einem Formular, ein paar buttons usw.
drücke ich z.B. einen Button, so soll mein Prozessor hinter dem Xport einen String gesendet bekommen, der z.B. "Licht 1 EIN" beinhaltet oder auch z.B. "Status Licht 1?". 
Der Prozessor schickt nach Abarbeiten des gesendeten Befehls eine Antwort wie z.B. "Status Licht 1 EIN" oder bestätigt das erste Beispiel mit "Licht 1 EIN.
Diese Hin und Her von Senden und auf Empfangen warten brauche ich, nicht mehr und auch nicht weniger.
Es dürfen über die RS232 keine HTML-Header oder so ankommen, diese bremsen nur, zumal ich sie nicht benötige.

Ich hoffe diese Erklärung war etwas hilfreicher, derartige Erklärungen sind nicht gerade meine Stärke!


----------



## Gast2 (7. Dez 2008)

Moin,

Du willst mit einem Applet Daten von XPort auslesen ... dem quasi die Webseite mit dem Applet überbügeln ... und dann willst Du auf einen Button klicken und dem XPort sagen "fang das Licht - halt es fest"?

Wozu zu Hölle willst Du da was mit Java-Script machen? Du kannst doch alles über das Applet machen?!

hand, mogel

PS: oder ich habe es immer noch nicht verstanden


----------



## Chris_Bayern (8. Dez 2008)

Moin,

Nicht so ganz das was ich meine.

Ich versuchs mal anders:
Ich habe eine kleine Html-Seite mit zwei Text-Eingabefeldern und einem Button.
Ich schreibe einen Text in das erste Eingabefeld.
Drücke ich jetzt den Button, so soll der eingegebene Text zum Xport geschickt werden. 
Vom Xport kommt nun ein Antwortstring, der in dem zweiten Eingabefeld wieder angezeigt wird.
Nachdem in der Antwort das Asciizeichen 13, also CR erkannt wurde, wird die Verbindung sofort beendet.
Kommt keine Antwort, so soll die Verbindung nach 1 bis 2 Sec. abgebrochen werden.

Es darf nur der Text des Eingabefeldes verschickt werden, keinesfalls irgendwelche HTTP-Header!

Wenn das ganze ohne Applet möglich ist, dann um so besser.

ICH BRAUCHE NICHT ZWINGEND EIN APPLET!!!

Herzlichen Dank für die Geduld!


----------



## Gast2 (8. Dez 2008)

Moin,

schau mal in das 4. (Deins) und 5. (meins) Posting ... da steht alles drinnen ... Du hast doch schon eine Kommunikation zwischen einem Applet/Webseite und Deinem XPort aufgebaut ... außerdem habe ich das Gefühl das Du Java und JavaScript verwechselst

hand, mogel


----------



## Chris_Bayern (9. Dez 2008)

Moin,

ch habe mir das ganze noch mal durch den Kopf gehen lassen und noch ein wenig in richtung Script gegoogelt.
War mir nicht bekannt, dass eine Socket-Verbindung auch mit einem "einfachen" Script realisierbar ist. Jedenfalls habe ich auch hierzu ein Beispiel gefunden, das soweit auch funktioniert, aber mit senden und Empfangen ist hier leider nix. Ein komplettes Beispiel mit senden und empfangen habe ich leider nicht gefunden, aber ggf. wird so klar, was ich machen möchte?


```
<html>
<head>
   <html>
   <script language="JavaScript">
      var sockets = new Array();
      var highestSocketIndex = 0;

      function newSocket(server, port, String2Send)
      {

         log("Create new socket... ", false);
         var newSize = sockets.push(new java.net.Socket());
         highestSocketIndex = newSize - 1;
         log("done (socket id " + highestSocketIndex + ")", true);
         try {
            log("Try to connect to " + server + " on port " + port + "... ", false);
            sockets[highestSocketIndex].connect(new java.net.InetSocketAddress(server, port));
            log("done", true);
         } catch(e) {
            log("failed: " + e, true);
         }
         try {
            log("Try to close socket... ", false);
            sockets[highestSocketIndex].close();
            log("done", true);
         } catch(e) {
            log("failed: " + e, true);
         }
         log("", true);
      //   return StringAntwort;
      }

      function log(message, doBreak)
      {
         var l = document.getElementById("log");
         if (doBreak)
            l.innerHTML += message + "
";
         else
            l.innerHTML += message;
      }

      function resetLog()
      {
         var l = document.getElementById("log");
         l.innerHTML = "[b]Log[/b]
";
      }
   </script>
   <title>Test Xport</title>
</head>
<body onLoad="resetLog();">
[url="javascript:newSocket('localhost', 10001,'zu sendender String');"]Test Xport simulator[/url]


[url="javascript:resetLog();"]Clear log[/url]


<div id="log"></div>
</body>
</html>
```
Kannst du das Script so ergänzen, dass der, im Aufruf übergebene Parameter "String2Send" auch wirklich gesendet wird und der empfangene String von der Funktion newSocket zurück gegeben wird?
Es ist mir bekannt, dass die Rückgabe bei dem Aufruf keinerlei sinn macht, aber zur Erklärung soll es mal reichen.

Bevor die Frage kommt, warum ich mich jetzt plötzlich auf "localhost" verbinde, ist einfach. Ich habe mir zum testen ein kleines Programm geschrieben welches einen Port 10001 auf meinem Rechner öffnet. Dieses Programm zeigt mir eine Meldung, wenn ein Connect erfolgreich war, den gesendeten Text und schickt auch automatisch eine Antwort zurück.

Ich benötige das, weil ich z.B. die Außentemperatur auf einer Intranet-Seite (soll nur bei uns zuhause funktionieren) mit anzeigen will. Diese Temperatur wird von einem Atmel-Prozessor erfasst, der wie Eingangs schon erwähnt über der Xport am Hausnetz hängt. Schicke ich jetzt z.B. den Befehl "Aussentemperatur" über den Xport an den Prozessor, antwortet der mit der aktuellen Außentemperatur. Den empfangenen wert kann ich dann in meiner Webseite anzeigen wo ich ihn gerade haben möchte ohne jedes mal die ganze Seite neu laden zu müssen.

Übrigens:
So weit ich weiß ich ein Script etwas, das zur Laufzeit interpretiert wird und ein Applet etwas, was compiliert werden muß um danach auf einem Xbeliebigen Betriebssystem von einer Virtuellen Maschine ausgeführt wird. Richtig?

Wie bereits erwähnt, ist es mir letztendlich egal, ob die Kommunikation nun, wie im letzten Beispiel von einem Script oder einem Applet abgewickelt wird. Mir ist das am liebsten, was auch auf einem WindowsMobile5 PDA mit Operabrowser funktioniert. So weit ich gelesen habe ich bei WM5 nicht viel mit JavaVM.

Herzlichen Dank schon mal

Gruß
Christian


----------

