# Highscores aus Applet-Spiel in XML-Datei speichern



## Tissi (28. Mai 2006)

Hallo!

Der Titel sagt eigentlich schon ziemlich genau, was mein Problem ist:

Ich möchte Highscore -Daten bestehend aus Spielername, Datum und Punktzahl aus einem Java-Applet an ein Script (am liebsten Perl) auf dem Server schicken, damit dieses Script die Daten dann in eine XML-Datei auf dem Server schreibt.

Wie aber kann ich denn das Script mit den Daten vom Applet aus aufrufen?

Schonmal vielen Dank für alle Hilfe die kommt!
Tissi


----------



## Dominicana (29. Mai 2006)

Willst du auf ein CGI-Script zugreifen?

Wenn ja,  mit POST oder GET?

POST-Beispiel für ein Gästebuch-CGI-Script (nur zum Anschauen, einige Variablen sind im Beispiel nicht initiiert):

```
try {
            // URL vom CGI-bin script.
            URL send = new URL(
                    "http://www.zweipage.de/cgi-bin/hpm_ext_guestbook.cgi"); // oder: new URL (getCodeBase().toString() + "env.cgi");
            // URL Verbindung
            URLConnection urlConn = send.openConnection();
            // Läßt das run-time system (RTS) wissen, wir wollen einen Input (falls das CGI-Script etwas zurückliefert)
            urlConn.setDoInput(true);
            // Läßt das RTS wissen, wir wollen einen Output.
            urlConn.setDoOutput(true);
            // Kein Cachen, wir wollen es Real.
            urlConn.setUseCaches(false);
            // Spezifiziert der Verbindungstyp
            urlConn.setRequestProperty("Content-Type",
                                       "application/x-www-form-urlencoded");
            // Sende den POST-Output
            DataOutputStream printOut = new DataOutputStream(urlConn.
                    getOutputStream());
            // Status der RadioButtons prüfen
            String temp = "";
            if (radio1.isSelected()) {
                temp = "01";
            } else if (radio2.isSelected()) {
                temp = "02";
            } else if (radio3.isSelected()) {
                temp = "03";
            } else {
                temp = "";
            }
            // Der Output-String mit den Formulardaten
            String content = "name=" +
                             URLEncoder.encode(fieldName.getText(), "UTF-8") +
                             "&email=" +
                             URLEncoder.encode(fieldEmail.getText(), "UTF-8") +
                             "&homepage=" +
                             URLEncoder.encode(fieldHome.getText(), "UTF-8") +
                             "&betreff=" +
                             URLEncoder.encode(fieldBetreff.getText(), "UTF-8") +
                             "&icon=" + URLEncoder.encode(temp, "UTF-8") +
                             "&text=" +
                             URLEncoder.encode(text.getText(), "UTF-8") +
                             "&userid=" + URLEncoder.encode("58476398", "UTF-8") +
                             "&designid=" +
                             URLEncoder.encode("49925691", "UTF-8") +
                             "&lng=" + URLEncoder.encode("deutsch", "UTF-8");
            printOut.writeBytes(content);
            printOut.flush();
            printOut.close();
            BufferedReader input = new BufferedReader(new InputStreamReader(new DataInputStream(urlConn.getInputStream())));
            String str;
            while (null != ((str = input.readLine()))) {
                text.append(str + "\n");
            }
            input.close();
        } catch (MalformedURLException murle) {
            JOptionPane.showMessageDialog(null,
                                          "MalformedURLException " + murle,
                                          "Fehler", JOptionPane.ERROR_MESSAGE);        } catch (IOException ioe) {
            JOptionPane.showMessageDialog(null, "IOException " + ioe.getMessage(),
                                          "Fehler", JOptionPane.ERROR_MESSAGE);        }
    }
```

GET wird ja über die URL übergeben, ist deswegen etwas einfacher.

Dom.


----------



## Tissi (29. Mai 2006)

Erstmal vielen Dank, das sieht schon recht hilfreich aus. Aber an welcher stelle wird nun genau das script gestartet? Es gibt ja keinen wirklichen Aufruf, so wie ich ihn mir vorgestellt hab. 
Wird das Script automatisch hierdurch aufgerufen/gestartet: printOut.writeBytes(content);?

tissi


----------



## Dominicana (29. Mai 2006)

Nun, das CGI-Script mußt du natürlich deinen Anforderungen anpassen , oder das Java-Programm. 
In den Zeilen 3 bis 18 wird die Verbindung aufgebaut.
Von Zeile 31 bis 45 werden die Daten (Verschlüsselt) in einen Stream geschrieben und mit 
	
	
	
	





```
printOut.writeBytes(content);
```
werden die Daten abgeschickt.

Der URLEncoder muß mit eingebaut werden, so wie in dem Beispiel, und auch "UTF-8". Das hat was mit CGI zutun und wie Daten versandt werden.


----------



## Tissi (29. Jun 2006)

ich hab den Code so angepasst:

```
try { 
            // URL vom CGI-bin script. 
            URL send = new URL("http://192.168.0.40/addHighscore.php"); 
            // URL Verbindung 
            URLConnection urlConn = send.openConnection(); 
            // Läßt das RTS wissen, wir wollen einen Output. 
            urlConn.setDoOutput(true); 
            // Kein Cachen, wir wollen es Real. 
            urlConn.setUseCaches(false); 
            // Spezifiziert der Verbindungstyp 
            urlConn.setRequestProperty("Content-Type", 
                                       "application/x-www-form-urlencoded"); 
            // Sende den POST-Output 
            DataOutputStream printOut = new DataOutputStream(urlConn. 
                    getOutputStream());  
            // Der Output-String mit den Formulardaten 
            String content = "name=" + 
                             URLEncoder.encode(player, "UTF-8") + 
                             "&date=" + 
                             URLEncoder.encode(date, "UTF-8") + 
                             "&score=" + 
                             URLEncoder.encode("" + score, "UTF-8"); 
            printOut.writeBytes(content); 
            printOut.flush(); 
            printOut.close(); 
        }
		catch (MalformedURLException murle)
		{ 
            JOptionPane.showMessageDialog(null, 
                                          "MalformedURLException " + murle, 
                                          "Fehler", JOptionPane.ERROR_MESSAGE);
        }
		catch (IOException ioe)
		{ 
            JOptionPane.showMessageDialog(null, "IOException " + ioe.getMessage(), 
                                          "Fehler", JOptionPane.ERROR_MESSAGE);
        }
```

das klappt aber nicht.
anscheinend wird das skript gar nicht ausgeführt.
Hab ich noch irgendwas falsh gemacht?

Tissi


----------



## L-ectron-X (29. Jun 2006)

Es geht nicht? Was geht denn nicht? Bitte genauer beschreiben!
Ein Blick in die Java-Console kann Aufschluss bringen.


----------



## Tissi (25. Sep 2006)

Also, ich hab es jetzt ganz anders gemacht:

ich hab in meine html-Datei mit dem Applet ein Formular gepackt. Mit LiveConnect schreibe ich dann die Daten ins Formular und submitte, sodass das Script die Daten per POST bekommt und verarbeiten kann.

...aber trotzdem vielen Dank für die Mühe!


----------



## gleichesProblem (16. Okt 2006)

Hallo

habe das gleiche Problem. Möchte auch Daten auf den Webserver schreiben. Habe folgenden Code im Applet eingebaut


```
URL url = RMainApplet.getURL();
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
PrintStream out = new PrintStream(urlConnection.getOutputStream());
String sLine = "";
for (int i = 0; i < dataList.size(); i++) {
    sLine += store.convertValueToData(dataList.get(i)) + "\n";
    if (sLine != null) {
        out.println("data=" + URLEncoder.encode(sLine, "UTF-8"));
    }
}
out.flush();
out.close();
```

Der Code wird ausgefüht, wenn ich auf einen Button drücke. Er scheint auch was zu machen. Nur erscheint auf dem Webserver nichts. Konsole ist auch leer.
Habe auf dem Server folgendes PHP-Script liegen, das aufgerufen wird.


```
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
	$var1 = $_POST["data"] . "\n";
	$datei = fopen("datei.txt", "a");
	fputs($datei, $var1);
	fclose($datei);
?>

</BODY>
</HTML>
```

Kann mir jemand helfen, wieso auf meinem Server keine Datei erzeugt wird?

Danke schon mal


----------

