![]() |
|||
| 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();
}
}