MrSpoocy Geschrieben 21. April 2005 Geschrieben 21. April 2005 Hi, Also ich hab unzählige versuche unzählige seiten durchstöbert aber nie den gewünscheten erfolg erziehlt. Folgende situation... Der User XY geht auf einen seite. Dort startet ein Applet und soll dann einen ServerSocket beim User XY aufbauen, also den surfer auf einem bestimmten port empfänglich machen wir daten von außen. Warum das ganze ? Derzeit ist es so das die seite mehr als 100 refreshs die sekunde hat weil jeder den neusten inhalt sehen will, für die ganz neugirigen will ich ein Live Update erzeugen. Auf dem websurfer kann ich aber nicht ohne weiteres einen server mit "java server.class" starten. Darum dachte ich mir das ich den server beim Client aufbaue und ihm dann per socket die daten sende. Soweit ich das nun gelesen habe geht es, man muß auf jeden fall die files signiren. Aber selbst das hat nicht geklapt Einer von euch ne ahnung ? mfg Spoocy Zitieren
kingofbrain Geschrieben 22. April 2005 Geschrieben 22. April 2005 Servus, ohne genaue Meldung, was nicht funktioniert hat, nicht. Aber das mit dem Signieren ist richtig. Und der Benutzer muss den signierten Applets dann auch vertrauen. Ich habe unsere Webstart jars damals mit der Anleitung in http://www.javabuch.de signiert und das hat dann auch geklappt. Langsam sollte ich bei dem mal nachfragen, ob ich nicht 10 Cent bekommen kann, wenn ich seine Seite linke. Würde sich lohnen. [EDIT] Ach ja, ich glaube mich zu erinnern, dass es auf der Seite von Sun im JavaTutorial auch ein Kapitel dazu gab. http://java.sun.com [/EDIT] Peter Zitieren
MrSpoocy Geschrieben 23. April 2005 Autor Geschrieben 23. April 2005 Also hat endlich alles geklapt.. hatte die tuturial von java.sun schon gefunden. Ich frag mich nur wie man es macht das da steht "von einer vertrauenswürdigen quelle :)" aber das is nebensache. Ich hab das script hinbekommen. Der user startet das applet und das applet wartet auf daten. Ich kann sie per PHP, c++ einfach über normale Socket verbindung ansprechen. Aber ich liege vor dem problem das wenn der user den Browser Minimiert oder ein andere fenster im fullscreen aufmacht abeitet das applet nicht, und wenn er es wieder öffnet wird der server neugestartet aber der allte ist ja noch offen (dies trit nur beim Mozilla auf). WIe kann ich es denn machen das das applet immer leuft solange das fenster nicht endgültig geschlossen wird. Hier mal der code: import java.applet.*; import java.io.*; import java.net.*; import java.awt.*; public class TCPApplet extends Applet { // applet parameters names private static final String PARAM_PORT = "listening_port"; private static final String PARAM_TIMEOUT = "socket_timeout"; private static final String PARAM_IP = "listening_ip"; private static final String PARAM_ID = "ID"; // applet parameters private String listenPort; private String listenIp; private String socketID; private int socketTimeOut; private class PortListnerThread implements Runnable { public void run() { ServerSocket socket = null; Socket connectionSocket = null; String tmp = null; String tmpid; Graphics g = getGraphics(); try { socket = new ServerSocket(Integer.parseInt(listenPort)); g.drawString("Waiting for data...", 20, 60); socket.setSoTimeout(0); while (true) { connectionSocket = socket.accept(); BufferedReader incoming = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); tmp = incoming.readLine(); tmpid = tmp.substring(0,8); g.setColor(Color.white); g.fillRect(20,70,200,50); g.setColor(Color.black); g.drawString("Daten: "+tmp.substring(8), 20, 80); g.drawString("SocketID: "+tmpid, 20, 100); g.drawString("Remot: "+connectionSocket.getInetAddress(), 20, 120); } } catch (Exception exc) { g.drawString("ERROR #1: "+exc.getMessage(), 20, 120); } finally { if (connectionSocket != null) { try { connectionSocket.close(); } catch (Exception exc) { } } if (socket != null) { try { socket.close(); } catch (Exception exc) { } } } } } public void init() { listenPort = getParameter(PARAM_PORT); listenIp = getParameter(PARAM_IP); socketID = getParameter(PARAM_ID); try { socketTimeOut = Integer.parseInt(getParameter(PARAM_TIMEOUT)); } catch (Exception exc) { // default socket timeout: 10 seconds socketTimeOut = 15000; } // lookup local ip address and add it to the script url String ipAddress = null; if (listenIp == null) { try { // this will only work if the applet is signed! Else 127.0.0.1 will be returned // furthermore, on networks, the internal network address will be returned InetAddress ia = InetAddress.getLocalHost(); ipAddress = ia.getHostAddress(); } catch (Exception exc) { // unable to determine local ip address ipAddress = "127.0.0.1"; } } else { ipAddress = listenIp; } } public void paint(Graphics g) { g.drawString("Connection to "+listenIp+" on Port: "+listenPort, 20, 20); g.drawString("Connection timeout is: "+(socketTimeOut/1000)+"sek", 20, 40); checkPort(); } private void checkPort() { // open a socket listner thread for the server to connect to Thread listner = new Thread(new PortListnerThread()); listner.start(); } } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.