TCP/IP mit Applet
-
Hi
ich versuche in einem Applet über TCP/IP mit einem Serve, der in meinem Netzwerk ist zu connected. Das Server Proggie wartet darauf, dass mein Client Proggie connected. Das geht auch gut, solange ich das alles an einem PC mache (also als host localhost nehme). Wen ich das jetzt aber übers Netzwerk versuche erscheint beim Template folgende Fehlermeldung:
access denied (java.net.SocketPermission 10.10.0.2 connect, resolve)
So wie ich das verstehe hab ich nicht die Erluabnis zu connecten. Wie kann ich die Erlaubnis "erhalten", oder liegt es an was anderem.
-
ich denke, du musst das applet auf den server mit drauflegen und und von dort aus über ip aufrufen..
appletrechte is ne besondere sache..hmm
http://www.minet.uni-jena.de/mirror/gj22/html/k100293.html
da steht was und im faq ist auch was..so ich dein problem richtig verstanden habe. die fehlermeldung entspricht diesem..
-
danke, werds mal ausprobieren.
-
So, hab jetzt mal ein bisschen versucht. Hat bisher auch gut geklappt, bloß da ist noch ein Problem: Wenn ich die html Datei von dem Server lade, meint der wieder was mit Permission denied. Ich bekomm auch nicht so ein schönes Fenster, wo irgendwas mit Zertifikat steht (wenn ichs nicht über den Server lade, sondern von meinem Rechner bekomm ich das Fenster). Ich hab den Schlüssel auch beim Server eingetragen, trotzdem erscheint kein Fenster. Hab ich vielleicht was vergessen?
-
habe eine kleine testreihe gefahren.. weils mich interessierte und um endlich mal selber klar zu werden.
ist vielleicht was anderes als du machst.. aber geht um applet und was sie so tun.folgender code
import java.awt.*; import java.applet.*; import java.net.*; import java.io.*; public class POSTtest extends Applet { final static int SIZE = 10; Button submit = new Button("Submit"); TextField[] t = new TextField[SIZE]; String query = ""; Label l = new Label(); TextArea ta = new TextArea(15, 60); public void init() { Panel p = new Panel(); p.setLayout(new GridLayout(t.length + 2, 2)); for(int i = 0; i < t.length; i++) { p.add(new Label( "Field " + i + " ", Label.RIGHT)); p.add(t[i] = new TextField(30)); } p.add(l); p.add(submit); add("North", p); add("South", ta); } public boolean action (Event evt, Object arg) { if(evt.target.equals(submit)) { query = ""; ta.setText(""); for(int i = 0; i < t.length; i++) query += "Field" + i + "=" + URLEncoder.encode( t[i].getText().trim()) + "&"; query += "submit=Submit"; // Send the name using CGI's POST process: try { URL u = new URL( getDocumentBase(), "post.php"); URLConnection urlc = u.openConnection(); urlc.setDoOutput(true); urlc.setDoInput(true); urlc.setAllowUserInteraction(false); DataOutputStream server = new DataOutputStream( urlc.getOutputStream()); server.writeBytes(query); server.close(); DataInputStream in = new DataInputStream( urlc.getInputStream()); String s; while((s = in.readLine()) != null) { ta.appendText(s + "\n"); } in.close(); } catch (Exception e) { l.setText(e.toString()); } } else return super.action(evt, arg); return true; } }
und statt cgi ein passendes php skript:
<?php foreach($HTTP_POST_VARS as $key=>$value){ echo $value."------"; } ?>
1. fall: lege beide auf einen server im netz
-rufe applet auf, es sendet postdaten nach submitdruck
und php script sendet daten ans applet zurück
soweit so gut2. fall: lege beide auf einen server auf meinem rechner
- einmal funzt die obige logik über localhost. das ist logisch.
- zum zweiten kann ich hier das applet mit
URL u = new URL( getDocumentBase(), "http://localhost/applet/post.php");
übersetzen, also mit protokoll ... damit kann ich
tatsächlich von einem lokalen html applet aufruf meine
url aufrufen und !! kriege daten zurück.dasselbe funktioniert sogar noch, wenn ich ins netz gehe und über
meine aktuelle ip gehe:URL u = new URL(getDocumentBase (), "http://meineaktuelleip/applet/post.php");
GENAU DAS hätte ich nicht gedacht.
versuche ich nämlich dieses auch mit dem world wide web serverURL u = new URL(getDocumentBase (), "http://www.meinserver.de/applet/post.php");
geht es nicht mehr. (zum glück, wäre unlogisch)
daraus folgt: es liegt am selben rechner.. das applet (wie auch in der rechte beschreibung erwähnt) hat besondere rechte, solange sich alles auf einem rechner abspielt.
achtung: hier geht es nicht allein um den aufruf einer seite von einem applet aus, sondern auch das zurückerhalten von bytes aus dem world wide web.
also: im www wie auf einem server im netzwerk auf einem anderen rechner muss ich die seiten zusammen auf den server legen und kann dann über normalen pfad zugreifen (bestimmt auch über ip, aber dann ist das nichtmehr zwingend).
aufrufen tue ich das applet dann über ip.hmm hoffe, es ist überhaupt das, was du da machst .. wenn nicht, habe ich den sonntag morgen mit neuen erkenntnissen zugebracht
ps: editiert weil ich die listen nicht hinkriege.. gg
[ Dieser Beitrag wurde am 23.06.2002 um 10:24 Uhr von elise editiert. ]
-
Hi
naja, ist nicht ganz das,was ich mache, danke aber für die Mühe :).
Ich hab nochmal ein bisschen versucht, funktioniert aber immer noch nicht. Folgende Fehlermeldung erscheint:
Exception: java.security.AccessControllException : access denied (java.io.FilePermission \c\bsp\myfile.class read)So wie das Aussieht hab ich wohl nicht die Erlaubnis auf die class Datei zuzugreifen. Ich habe die vorher in ein jar Archiv gepackt und dass dann mit jarsigned signiert.
Ich hab auch versucht mir die Rechte auf den Zugriff zu geben, also in die Policy Dateipermission java.io.FilePermission "<<ALL FILES>>", "read";
geschrieben. Trotzdem die gleiche Meldung.
Wie gesagt, wenn ich es von meinem Rechner aus laufen lasse funktionierts (ich werde gefragt, ob ich dem Applet vertraue usw.) ich kann sogar mit dem Serverproggie connecten, das wars aber auch,kann keine Daten übertragen usw. Das ist ja auch nicht so schlimm, ich wills ja von Server aus starten, aber da kommt eben diese Fehlermeldung...[ Dieser Beitrag wurde am 23.06.2002 um 11:30 Uhr von mman editiert. ]
-
hast du das mit diesem grant gemacht??
http://pse.cs.vt.edu/geosim/MigModel/help/Policies.htmlhab ich einmal .. war ein totaler akt.. (siehe faq)
mir fällt nur noch ein.. lohnt es sich nicht, ein php oder cgi skript dazwischenzuschieben??
also ich blick nicht, was du brauchst, aber wenn das applet in einen file was schreiben soll, warum sendest du die daten nicht zu php und läßt sie dann auslesen und darüber in den file schreiben?so mach ichs immer.. easy way...
nur so ne idee. oder ein servlet zwischenschieben... geht auch...
cu
-
Ich will ja garnix in ne File schreiben, dass ist ja der Witz dabei. Deshlab versteh ich auch nicht, warum ich diesen Permission Fehler bekomme. Eigentlich will ich von einem Template, dass auf nem anderen Rechner liegt über TCP/IP Daten verschicken.
Das mit dem policy tool werd ich nachher mal versuchen, habs bis jetzt immer manuell gemacht, vielleicht hab ich dabei was falsch gemacht.
Was mich aber auch wundert: Ich hab mein applet mal auf ein webserver gelegt und von da aufgerufen, da hats funktioniert(Also Frage, ob ich Signatur vertraue usw.). Allerdings auch nur auf dem PC, auf dem ich das Applet erstellt habe, auf einem anderen stand, dass die class Datei in der der Code des Applets liegt, und das ich auch ins jar Archiv gepackt habe nicht gefunden wurde. Ich werd's aber morgen nochmal ausprobieren, da hab ich mehr Rechner zur Verfügung...
Ich hab mir den FAQ Beitrag mal durchgelesen. Hast du von einem anderen Rechner aus auf die Dateien des Rechners zugegriffen, und lag das Applet auf dem Rechner, auf dem die Dateien verändert werden solten? Musstest du da nicht noch irgendwas beim signieren hinzufügen, oder hats einfach gereicht mit jarsigner eine mit keytool erstellten Signatur zum jar Archiv hinzuzufügen( das hab ich nämlich auch gemacht und ging nicht). Wenn du es so gemacht hast, hattest du auf beiden Rechnern den key (also durch import bzw. export) oder nur auf einem?
[ Dieser Beitrag wurde am 23.06.2002 um 22:37 Uhr von mman editiert. ]
-
hatte es nur auf einem...
und habe mich an den obigen link gehalten..da steht auch was zum export von einem key:
Soll das signierte Applet auf anderen Arbeitsplätzen laufen, ist es erforderlich, das Zertifikat des Schlüssels, mit dem es signiert wurde, dort zu installieren. Soll es dagegen nur auf dem Arbeitsplatz laufen, auf dem auch der Schlüssel generiert wurde, ist das nicht erforderlich. Bei der Generierung des Schlüssels wurde ja auch ein (selbstsigniertes) Zertifikat erzeugt.
Um das Zertifikat weitergeben zu können, muß es zunächst unter Verwendung der Option -export von keytool aus der lokalen Schlüsseldatenbank exportiert werden:
keytool -export -alias gj22 -file gj22.cert
Es liegt nun in der Datei gj22.cert und kann auf das Zielsystem kopiert werden. Mit der -import-Option von keytool kann es dort in die Schlüsseldatenbank aufgenommen werden:
C:\--->keytool -import -alias gj22 -file gj22.cert
Enter keystore password: gj22ks
Owner: CN=Guido Krueger, O=Computer Books, C=de
Issuer: CN=Guido Krueger, O=Computer Books, C=de
Serial number: 38663e2d
Valid from: Sun Dec 26 17:11:25 GMT+01:00 1999 until: Sat Mar 25 17:11:25 GMT+01
:00 2000
Certificate fingerprints:
MD5: D5:73:AB:06:25:16:7F:36:27:DF:CF:9D:C9:DE:AD:35
SHA1: E0:A4:39:65:60:06:48:61:82:5E:8C:47:8A:2B:04:A4:6D:43:56:05
Trust this certificate? [no]: y
Certificate was added to keystoreNach dem Aufruf muß zunächst das Paßwort der Schlüsseldatenbank angegeben werden. Dann zeigt das Programm die Eigenschaften des Zertifikats an und erwartet, daß die Informationen bestätigt werden. Anschließend wird das Zertifikat in die Schlüsseldatenbank aufgenommen.
es war wirklich ein erlebnis
trotzdem: ich verstehe nicht, wenn du das applet auf dem server hast und es sozusagen dann localhost mit deiner anwendung korrespondiert, das es dann überhaupt probleme gibt mit zugriff von deinem und anderen rechnern.. (bzw. plötzlich von deinem nicht mehr)
ich wollte vom applet auf eine access datenbank zugreifen, bzw. in ein file schreiben. das ist was anderes.. da greift das applet dann direkt auf die festplatte zu.. das ist nicht erlaubt und muss extra gehändelt werden..
vielleicht ist die fährte doch falsch ? we see