HSG |
|
Herr Heusel aus Herxheim hat viele Programme nach Java übertragen:
Die folgenden Ausführungen lehnen sich teilweise an eine Anleitung des Gymnasiums Korschenbroich an.
Bei der Programmierung der seriellen Schnittstelle gibt man die Plattform-Unabhängigkeit von Java auf. Die entsprechenden Klassen und Methoden gehören nicht zum Kernbereich von Java. Aber für die Windows- und Solaris-Betriebssysteme gibt es ein Erweiterungs-Paket mit Namen javax.comm, das alle benötigten Programmiermöglichkeiten bietet. Das Paket kann im Internet von java.sun.com/products/javacomm/ heruntergeladen werden. Es enthält doc-Dateien, Beispielprogramme und die notwendigen Java-Erweiterungsdateien win32com.dll, comm.jar und javax.comm.properties. Um diese in die Java jdk1.2 oder jdk1.3 Programmierumgebung einzubinden, müssen sie in die hier angegebenen Verzeichnisse kopiert werden, wobei <jdk> das Basis-Verzeichnis der jdk-Installation bezeichnen soll (also z.B. c:\jdk1.2)
import java.applet.*; import java.awt.*; import java.awt.event.*; public class morsen extends Applet { bitschicht bs; public void init() { bs = new bitschicht("COM1","morsen"); bs.ausgangSetzen(true); } }
import javax.comm.*; public class bitschicht { static CommPortIdentifier portID; static SerialPort serss; public bitschicht(String anschluss, String programm) { try{ portID = CommPortIdentifier.getPortIdentifier(anschluss); serss = (SerialPort) portID.open(programm,2000); } catch(Exception exc){ //System.out.println("Fehler :"+exc); } /* try { serss.setSerialPortParams(2400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1 , SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) {} */ serss.setDTR(true); } public void ausgangSetzen(boolean jn) { serss.setRTS(!(jn)); } public boolean eingangLesen() { return ( ! (serss.isCTS())); } }
import java.awt.*; import java.util.*; import java.io.*; import java.net.Socket; import java.awt.event.*; public class httpKommando extends Frame implements ActionListener{ // Das Programm ist eine Erweiterung der Klasse frame TextField kommando; TextArea ausgabe; Button los; public httpKommando() { super("Kleines HTTP-Programm"); // Konstruktor der Klasse frame mit Fenstertitel this.addWindowListener (new WindowAdapter(){ public void windowClosing(WindowEvent e){ // Programmende beim Schliessen des Fensters dispose(); System.exit(0); } }); setLayout(new FlowLayout()); kommando=new TextField("Eingabe: HTTP-Befehl",50); add(kommando); los=new Button("Senden"); add(los); los.addActionListener(this); ausgabe=new TextArea(20,70); add(ausgabe); } public void actionPerformed(ActionEvent e) { ausgabe.setText(""); try { kommunizieren( kommando.getText() ); } catch( IOException ioe ) { ausgabe.setText("Kein Server erreichbar!"); } } public static void main(String args[]) // Automatischer Aufruf beim Programmstart { httpKommando f = new httpKommando(); // frame wird erzeugt, die Groesse definiert und f.setSize(1000,400); f.show(); // angezeigt. } public void kommunizieren(String eingabe) throws IOException { String befehl,zeile; Socket partner; PrintWriter out; BufferedReader in; befehl=eingabe+" HTTP/1.1\r\n\r\n"; // Protokollspezifikationen anhaengen partner=new Socket("www-proxy.t-online.de", 80 ); // Proxy IP und Port ausgabe.append("\tgesendeter Befehl: >>>>>>>>>> "+eingabe+" HTTP/1.1\n"); ausgabe.append("\tTCP/IP Hostnummer: >>>>>>>>>> "+partner.getLocalAddress()+"\n\n"); out=new PrintWriter(partner.getOutputStream()); out.println(befehl); out.flush(); in = new BufferedReader(new InputStreamReader(partner.getInputStream())); zeile = in.readLine(); while( zeile != null ) { ausgabe.append("<<< " + zeile + "\n"); zeile=in.readLine(); } in.close(); out.close(); partner.close(); } }