RMI + Applet - Verbindung nur lokal

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

habe ein kleines Problemchen mit meinem RMI-Applet.
Lasse ich Server und Client lokal laufen, funktioniert alles.
Sobald ich das Applet jedoch von einem anderen PC starte, bekomme ich keine Verbindung :-(

Der Server:
Code:
	  Registry registry;

	  LocateRegistry.createRegistry( Registry.REGISTRY_PORT );
	  registry = LocateRegistry.getRegistry();
	
	  RmiDBImpl dbImpl = new RmiDBImpl();
          RmiDB stub = (RmiDB) UnicastRemoteObject.exportObject( dbImpl, 0 );
          RemoteServer.setLog( System.out );
    
          registry.rebind( "rmi://10.30.1.74/DB", stub );
    
          DbFunctions.connect();


Der Client:
Code:
			Registry registry = LocateRegistry.getRegistry();
			myDB = (RmiDB) registry.lookup( "rmi://10.30.1.74/DB" );


Die Firewall(s) sind deaktiviert, ich kann das Applet selbst auch vom Server starten - nur die Verbindung zum RMI-Dienst klappt nicht.

Woran kann das noch liegen?

Das Applet ist mit dem Tool aus der FAQ signiert.

Muss ich noch irgendwelche Policies setzen, damit das Applet eine Verbindung zum RMI-Dienst aufbauen darf?

Vielen Dank schon einmal im Voraus für die Hilfe!

Philipp
 

L-ectron-X

Gesperrter Benutzer
Ja, und du musst auch den RMISecurityManager instanziieren.

Die Policy-Datei kann den Namen rmi.policy tragen und folgenden Inhalt haben:
Code:
grant {
   permission java.security.AllPermission;
};
Die Policy-Datei muss im Verzeichnis deines RMI-Servers gespeichert sein.

Den RMISecurityManager musst du im Applet, wie im RMI-Server instanziieren. Dazu folgender Code:
Code:
System.setSecurityManager(new RMISecurityManager());
Im RMI-Server kannst du den Aufruf am besten gleich als erste Zeile im Konstruktor positionieren.
Im Applet als erste Zeile in der init()-Methode.

Um die Zugriffsrechte zu garantieren muss nun der Server mit folgendem Befehl gestartet werden:
Code:
java -Djava.security.policy=rmi.policy -Djava.rmi.server.codebase=http://meine-domain/ -jar RMI-Server.jar

Die Firewall brauchst du nicht deaktivieren, es genügt den RMI-Standard-Port 1099 zu öffnen, du hast die RMI-Registry ja auch nur diesen gebunden.

Damit das Applet sich mit dem Rechner verbindet, auf welchem sich der Webserver und die RMI-Registry befinden, hat sich folgender Code bewährt:
Code:
myDB = (RmiDB)Naming.lookup("//" + getCodeBase().getHost() + "/DB");
Diese Zeile ist an Dein Beispiel angepasst.
 
G

Guest

Gast
Super, vielen Dank für die schnelle Antwort! :)
Werde ich sofort mal ausprobieren ...
 
M

Maddin28

Gast
Hi

ich hab so ziemlich das selbe Problem wie mein Kollege "Gast"... lokal geht alles prima, sobald ich im Netzwerk arbeiten möchte, geht die Verbindung nicht mehr.
Also ich poste mal das gesamte Bsp., hab schon probiert den RMISecurityManager zu implementieren, geht aber irgendwie nicht richtig, ich bekomme immer die Meldung:

Code:
java.security.AccessControlException: access denied (java.lang.RuntimePermission createSecurityManager)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.<init>(Unknown Source)
	at java.rmi.RMISecurityManager.<init>(Unknown Source)
	at index.init(index.java:17)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

so im Folgenden also das kleine Bsp.

index.java
Code:
import java.rmi.Naming;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.rmi.RMISecurityManager;
import java.rmi.*;

public class index extends Applet implements MouseListener
{
    
    Panel links, rechts;
	Panel rechtsoben, rechtsunten, gesamt;
    List LstSpiele, LstTische;
    
    public void init(){
    
	    System.setSecurityManager(new RMISecurityManager());
	    LstSpiele = new List(25, false);
		LstSpiele.addMouseListener(this);
		LstSpiele.add("2er Watten");
		LstSpiele.add("4er Watten");
		LstSpiele.add("4er Watten (blind)");
	    
	    LstTische = new List(20, false);
	    LstTische.addMouseListener(this);
		
		int i = 0;
		for (i=0;i<20;i++){
		LstTische.add("Tisch Nr."+i);	
		}
	    
	    gesamt = new Panel();	
	    links = new Panel();
	    rechts = new Panel();
	    rechtsoben = new Panel();
	    rechtsunten = new Panel();	
	    
	    gesamt.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
		//gesamt.setPreferredSize(new java.awt.Dimension(500,400));
	    gesamt.add(LstSpiele);
	    gesamt.add(LstTische);
    
    	add(gesamt);
    
	
	
    }

    public void mouseClicked(MouseEvent e)
    {	
	    if (e.getClickCount() == 2){
	    	try{
	    		ClientImpl neuesfenster = new ClientImpl();
	    		//neuesfenster.setSize(750,700);
	    	//neuesfenster.addWindowListener(new FensterWegAdapter());
	    	neuesfenster.setVisible(true);
	    	}catch(Exception ex){}
	    	

	    }
    }
    public void mousePressed(MouseEvent e)
    {}
    public void mouseReleased(MouseEvent e)
    {}
    public void mouseEntered(MouseEvent e)
    {}
    public void mouseExited(MouseEvent e)
    {}

}

ServerImpl.java
Code:
import java.rmi.server.UnicastRemoteObject;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.util.*;

public class ServerImpl extends UnicastRemoteObject implements ServerInterface {

	private Vector<ClientInterface> clients = new Vector<ClientInterface>();
	
	String test = new String("teststring");
	
	// ...
	public ServerImpl() throws RemoteException{
		System.setSecurityManager(new RMISecurityManager());
	}
	public void registerMe(ClientInterface cli) throws RemoteException {
	
		// Client zum Vektor hinzuf�gen
		clients.add(cli);
	
	}

	// ...
	public String gibString(){
		return test;
	}
	public void setzeString(String str){
		test = 	str;
	}
	// notifyClients() �berall dort aufrufen, wo die Clients benachrichtigt werden sollen
	public void notifyClients() {
	
		for(Enumeration<ClientInterface> items = clients.elements(); items.hasMoreElements(); ) {
		
			ClientInterface c = items.nextElement();
		
			try {
			
				c.NeuZeichnen(); // Client benachrichtigen
				
			} catch (RemoteException e) {
				
				// ups, da is was schief gelaufen
				
				e.printStackTrace();
				
			}
		
		}

	}
	
	public static void main(String args[]) {
		    try {
		      Naming.rebind("//192.168.0.220/Server", new ServerImpl());
		    } catch(Exception ex) {
		      ex.printStackTrace();
		    }
	}
}

ClientImpl.java
Code:
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.rmi.Naming;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ClientImpl extends JFrame implements ClientInterface, MouseListener {

	ServerInterface server;		
	JButton btn_test1, btn_test2;
	JLabel lbl_1, lbl_2, lbl_3, lbl_4;
	int tischid = 1;
	String serverstring = new String("//192.168.0.220/Server");
	
	public ClientImpl() throws RemoteException { // im Konstruktor
		UnicastRemoteObject.exportObject(this, 0);
		btn_test1 = new JButton("Neuzeichnen");
		btn_test1.addMouseListener(this);
		btn_test1.setName("test1");
		btn_test2 = new JButton("WerteSetzen");
		btn_test2.addMouseListener(this);
		btn_test2.setName("test2");
		
		lbl_1 = new JLabel("");
		lbl_1.setVerticalAlignment(JLabel.CENTER);
		lbl_1.setHorizontalAlignment(JLabel.CENTER);
		lbl_1.setPreferredSize(new Dimension(100,40));
		
		//lbl_1.setBackground(Color.BLACK);
		//lbl_1.setOpaque(true);	
		// sich selbst exportieren
		setLayout(new GridLayout(3,1));
		
    	//neuesfenster.addWindowListener(new FensterWegAdapter());
    	setVisible(true);
		add(btn_test1);
		add(btn_test2);
		add(lbl_1);
		
		//UnicastRemoteObject.exportObject(this, 0);
		// ...
		
		try 
        {
      		server = (ServerInterface)Naming.lookup(serverstring);
		    server.registerMe(this);
		      
		} catch(Exception ex) {
			ex.printStackTrace();
		}
		
		// sich selbst beim Server registrieren (kann auch in anderer Methode passieren - Verbindung zum Server muss bereits bestehen)

	}
// ...
	
	public void NeuZeichnen() throws RemoteException{
		
		String nochntest = new String("");
		try 
        {
      		server = (ServerInterface)Naming.lookup(serverstring);
		    nochntest = server.gibString();
		     
		} catch(Exception ex) {
			ex.printStackTrace();
		}
			
		lbl_1.setText(nochntest);
	}
	
	public void mouseClicked(MouseEvent e)
    {	
	    if (("test1").equals(e.getComponent().getName())){
	   		//NeuZeichnen();
	    }
	    if (("test2").equals(e.getComponent().getName())){

	   			//lbl_1.setText(lbl_1.getText() + "G");
	   					
	   			try 
	   	        {
	   	      		server = (ServerInterface)Naming.lookup(serverstring);
	   			    lbl_1.setText("Ausgabe:" + server.gibString());
	   			    server.notifyClients();
	   			      
	   			} catch(Exception ex) {
	   				ex.printStackTrace();
	   			}	
	    }
    }
    public void mousePressed(MouseEvent e)
    {}
    public void mouseReleased(MouseEvent e)
    {}
    public void mouseEntered(MouseEvent e)
    {}
    public void mouseExited(MouseEvent e)
    {}
	
	public static void main(String[] args) {
        
        

	    try{
	    	ClientImpl fenster = new ClientImpl();  
	    	fenster.setSize(300,300);
	    	fenster.setVisible(true); 
	    	
	   	}catch(RemoteException e){
	     	System.out.println("Sorry, the  Customer List is not available");
	  	}

    }
}

So...also das Applet (index.java) öffnet Jframes (ClientImpl.java). Das Einzige was passiert, ist, dass beim Klicken auf den 2ten Button eine Variable auf dem Server ausgelesen wird und in jedes der Clients ausgegeben wird. Also wie gesagt, lokal funktioniert das Ganze....gebe ich meine Netzwerk-IP-Adresse ein, nicht mehr.

Bin für jeden Tip dankbar....
Gruß
 

L-ectron-X

Gesperrter Benutzer
Hast du das Applet signiert? In der FAQ liegt ein Tool, mit dem du das ganz einfach erledigen kannst.
Und beim Server muss die oben erwähnte policy-Datei liegen (Was aber nichts mit dem Client zu tun hat).
 
M

Maddin28

Gast
Hi

danke für die schnelle Antwort...In der Tat, ich hab mein Applet nicht signiert, hab das zwar jetzt schnell probiert, aber die Fehlermeldung kommt trotzdem.
Wie sieht es damit aus, wenn ich das ganze ohne Applet mache, wenn ich also meine Anwendung etwas umschreibe und das JFrame eigenständig aufrufe? Muss ich dann auch noch was signieren, oder beachten, oder sollte dann alles laufen?
 

L-ectron-X

Gesperrter Benutzer
Ist es genau die gleiche Fehlermeldung (identischer Wortlaut)?

Applikationen brauchen nicht signiert zu werden. Bin mir da jetzt nicht ganz sicher, ich vermute, dass du bei Verwendung eines Applets in ClientImpl auch den RMISecurityManager instanziieren musst. Auf jeden Fall aber, wenn du es als Applikation laufen lässt.
 
M

Maddin28

Gast
Ja, der Wortlaut ist der selbe. Ich hab das Programm auf einer Linux Kiste am Laufen, die Batch Datei zur Signierung eines Applets ist aber windows.bat. also hab ich alles auf ne Windows Kiste kopiert, dort die Batch-Datei aufgerufen, und naschließend wieder alles zurückkopiert auf den Server. Ich weiß nicht, ob das überhaupt geht, oder ob man das Zertifikat auf dem Rechner erstellen muss, auf welchem dann auch das Applet läuft.

dass ich den RMISecurityManager auch in ClientImpl instanzieren muss hab ich mir schon gedacht, allerdings wollte ich zunächst mal probieren, ob das Applet an sich überhaupt angezeigt wird, was ja leider nicht der Fall ist.
 

L-ectron-X

Gesperrter Benutzer
Maddin28 hat gesagt.:
Ich weiß nicht, ob das überhaupt geht, oder ob man das Zertifikat auf dem Rechner erstellen muss, auf welchem dann auch das Applet läuft.
In dem Fall könnte man das Applet ja nicht im Internet veröffentlichen... :wink:

Zeig mal deine HTML-Datei.
 
G

Guest

Gast
Code:
<html>
<head>
<title>Java-Applets einbinden</title>
</head>
<body>

  <applet archive="MeinJar.jar" code="index.class" width="800" height="600" alt="Java-Applets mit HTML-Farbw&hler">

  </applet>
</p>

</body>
</html>
 

L-ectron-X

Gesperrter Benutzer
Jo, passt so. Und MeinJar.jar ist ganz sicher signiert? Bekommst du den Dialog zum Akzeptieren des Zertifiakts vom Browser angezeigt?
 
G

Guest

Gast
Nein den Dialog bekomme ich nicht, aber ich hab das Jar File mit der Batch-Datei aus dem FAQ erstellt!
 

L-ectron-X

Gesperrter Benutzer
Wenn du den Dialog nicht bekommst, ist dein Applet auch nicht signiert.
Vielleicht hast du die unsignierte Version auf den Webserver geladen?

Das Tool gibt im Fehlerfall u.U. auch Meldungen aus... Gabs da welche?

Hast du das Applet auch mal von anderen Rechnern aus aufgerufen?
 
M

Maddin28

Gast
Komisch...im firefox fragt er nicht danach, ich hab's jetzt mit dem IE probiert und das Applet wird nun angezeigt (nachdem man das Zertifikat anerkennt).
Soweit sogut, allerdings klappt es immer noch nicht, wenn ich auf dem Server jetzt die ServerImpl starte, geht das soweit. Allerdings erhalte ich bei jedem JFrame, welches ich dann über das Applet erzeuge folgende Meldungen in der JavaConsole auf dem Client:
Code:
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
	java.net.ConnectException: Connection refused: connect
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at ServerImpl_Stub.registerMe(Unknown Source)
	at ClientImpl.<init>(ClientImpl.java:48)
	at index.mouseClicked(index.java:53)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.List.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
	... 18 more
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
	java.net.ConnectException: Connection refused: connect
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at ServerImpl_Stub.registerMe(Unknown Source)
	at ClientImpl.<init>(ClientImpl.java:48)
	at index.mouseClicked(index.java:53)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.List.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
	... 18 more
 

L-ectron-X

Gesperrter Benutzer
Du musst den Port öffnen, an dem du die RMI-Registry lauschen lässt. Der Standard-Port ist 1099.
 
M

Maddin28

Gast
rmiregistry ist ausgeführt und lauscht am standartport 1099. Das hab ich extra nochmal überprüft, mit telnet 192.168.0.220 1099. Und da komm ich drauf.
hmmm.... ich bin ratlos.
 
M

Maddin28

Gast
Jetzt klappert's! Ich hab gegoogelt und gefunden, dass da wohl ein DNS Problem vorliegt, da das eigene Netzwerkinterface nicht mit der öffentlichen IP, sondern in erster linie als 127.0.0.1 gesehen wird. Das kann mit folgendem Schalter umgebogen werden und dann wie gesagt geht's auch:
-Djava.rmi.server.hostname=192.168.0.220

Danke an alle!

Achso ne Frage hätte ich noch zu den Jar. bzw. wie ich meine Sourcen gut schützen kann, sodass andere nicht an den Source kommen, auch nicht mit "Decompilern" usw.
 

Wildcard

Top Contributor
Maddin28 hat gesagt.:
Achso ne Frage hätte ich noch zu den Jar. bzw. wie ich meine Sourcen gut schützen kann, sodass andere nicht an den Source kommen, auch nicht mit "Decompilern" usw.
Vor dekompilieren kannst du nicht schützen.
Du kannst den Code nur schwer lesbar machen in dem du einen Obfuscator benutzt.
 
M

Maddin27

Gast
Moin....jaja schon wieder ich :)

Also ich hab das Ganze oben ja mittlerweile so hingekriegt, dass es in meinem internen Netzwerk 192.168.0.X läuft. Soweit sogut. Nun soll das Ding, aber nicht im internen Netz allein laufen, sondern auf ner WebSite im Internet.
Serverseitig sollte alles passen, mein Programm läuft, und zwar genau so lange, bis es zum ersten mal auf meinen Client zugreifen will. Fehlermeldung ist dann folgende, die am Server ausgegeben wird:
java.rmi.ConnectIOException: Exception creating connection to: 192.168.0.102; nested exception is:
java.net.NoRouteToHostException: No route to host
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:587)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:179)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy1.NeuZeichnen(Unknown Source)
at Server.notifyClients(Server.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.net.NoRouteToHostException: No route to host
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:364)
at java.net.Socket.connect(Socket.java:507)
at java.net.Socket.connect(Socket.java:457)
at java.net.Socket.<init>(Socket.java:365)
at java.net.Socket.<init>(Socket.java:178)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
... 18 more
Die IP 192.168.0.102 ist die IP Adresse von dem Client, von welchem ich auf die InternetSeite/das Applet zugreife. Das sollte eigentlich doch automatisch funktionieren, also das mit dem Auflösen der Adresse, oder nicht????
 
M

Maddin28

Gast
Hi

ja, also die Situation ist folgende... Der RMI Server ist mit dem Applet momentan sogar im selben Verzeichnis und erreichbar im Internet unter einer öffentlichen IP.
Am Server wurde rmiregistry ausgeführt und der Server mit den -Djava..... Schaltern gestartet. Soweit geht es ja, vom Applet aus wird ein JFrame aufgemacht und der Inhalt richtig angezeigt (Werte werden nur vom Server gelesen). Dann beim Klicken auf einen Button sollen Werte an allen angemeldeten Clients aktualisiert werden (braucht nicht nur der Client Verbindung zum Server, sondern auch umgekehrt) und genau da hackt es dann und da bekomm ich dann die Fehlermeldung. Irgendwie auch logisch, weil direkt kann der Server, der sich im Internet befindet ja nicht auf 192.168.X.X zugreifen.
Was mich stutzig macht, ist, dass diese Sache nicht NAT und RMI übernehmen.
 
G

Guest

Gast
Wieso routen? Der 1099 ist ja am Server im Internet direkt erreichbar (von den clients aus).
 
M

Maddin28

Gast
Also nochmal muss ich lästig sein. Mal ganz allgemein gedacht. Auf einem Server im Internet ist die Server Klasse meines RMI Servers gestartet und läuft korrekt. Ich kann nämlich mit meinem Client auf das Serverobjekt zugreifen und bestimmte Werte abgreifen.
Soweit sogut.
Nun können sich wie gesagt ja mehrere Clients am Server anmelden und die Clients haben eine Methode NeuZeichnen throws RemoteException. Sobald diese aufgerufen wird, bekomme ich, dass auf den Client nicht zugegriffen werden kann. Aber genau das sollte doch RMI übernehmen, oder nicht? Wie funktionieren denn Netzwerkspiele? Ich meine, da braucht es ja das Selbe, also dass die Clients upgedatet werden. Hat vielleicht jemand ein kleines Netzwerkspiel, welches funktioniert, für mich, vielleicht kann ich mir da was abgucken.

Thx
 
M

maddin28

Gast
Ja, das macht er ja auch. Aber dazu muss ich auf dem Client ja keine RMI registry laufen haben. Wie gesagt im LAN funktioniert das Ganze, nur im WAN also mit nem root-Server im Internet geht es nicht mehr.
 
M

Maddin28

Gast
Moin. Ich hab nochmal drüber nach gedacht und das Einzige was mir einfällt, worauf der Server zugreifen muss ist doch die StubKlasse auf dem Client. Diese ist im Jar File enthalten und da kommt der Server logischerweise nicht ran. Aber genau deshalb hab ich das Ganze ja via Applet gemacht, ich raff das nicht. Es muss doch möglich sein ein Netzwerkspiel mit Applets zu realisieren, oder brauch ich da zwingend jsp???
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
H Socket Mit Applet Verbindung zu eigener Website aufbauen Netzwerkprogrammierung 4
F applet verbindung zum server Netzwerkprogrammierung 6
Androbin Socket Fehlerhafter Applet-Chat Netzwerkprogrammierung 12
S Datei schreiben über Applet Netzwerkprogrammierung 8
N Applet/Applikation auf Xport laufen lassen Netzwerkprogrammierung 10
N Applet Access Denied Netzwerkprogrammierung 12
TheJavaKid Webcam-Chat im Applet (ChatRoulette Klon) Netzwerkprogrammierung 10
H Applet soll XML-File auf Server speichern Netzwerkprogrammierung 6
B FTP Applet mit FTP-Server-Zugriff sicher gestalten Netzwerkprogrammierung 12
J Applet soll Daten auf Server ablegen - einfachster Weg fuer n00bs? Netzwerkprogrammierung 4
O php - applet Kommunikation Netzwerkprogrammierung 9
B Client Server Applet keine Ahnung Netzwerkprogrammierung 3
R Applet --> PHP --> Applet Netzwerkprogrammierung 2
E Userliste für Chat Applet Netzwerkprogrammierung 4
B RTP - Applet Starthilfe Netzwerkprogrammierung 7
B Globale IP-Adresse auslesen - Java Applet Netzwerkprogrammierung 2
S RMI RMI-Applet kommunikation funktioniert nicht Netzwerkprogrammierung 8
J Applet Security - java.security.AccessControlException: access denied Netzwerkprogrammierung 3
E Files von Server laden in Applet Netzwerkprogrammierung 5
aze Applet von Webseite aufrufen und mit diesem kommunizieren Netzwerkprogrammierung 8
M chat als applet umgeschrieben - unbekannter fehler :( Netzwerkprogrammierung 2
U Server-IP in Applet ermitteln Netzwerkprogrammierung 4
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
ABstraCT Applet multipler port Zugriff möglich ? Netzwerkprogrammierung 5
C Applet mit Script steuern Netzwerkprogrammierung 9
A Problem mit Netzwerkprogrammierung im Applet! Netzwerkprogrammierung 10
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
F Applet Datei Zugriff Netzwerkprogrammierung 13
M Server aus inem Applet heraus starten Netzwerkprogrammierung 4
G Applet und Netzwerkverbindungen? Netzwerkprogrammierung 2
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
K Datenaustausch zwischen Applet und JSP Netzwerkprogrammierung 4
E Applet zum Datei-Upload Netzwerkprogrammierung 3
T Image aus Applet an PHP Seite senden? Netzwerkprogrammierung 3
S Java Applet Chat Grundsatzfrage Netzwerkprogrammierung 6
H RMI + Socket + Applet Netzwerkprogrammierung 5
N Chatprogrammierung - Applet Netzwerkprogrammierung 3
S Von Applet zu applet Netzwerkprogrammierung 7
S Applet und JWS auf Apache-Axis (SOAP) Netzwerkprogrammierung 8
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
G Applet java.net: acces denied Netzwerkprogrammierung 2
D Einfache Applet-Servlet-Kommunikation Netzwerkprogrammierung 5
R Applet & Netzwerk Netzwerkprogrammierung 4
M Servlet - Applet Kommunikation Netzwerkprogrammierung 3
M Einfachste Möglichkeit aus'm Applet Daten an Server senden Netzwerkprogrammierung 6
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
R applet servlet kommunikation Netzwerkprogrammierung 2
M Zum x-ten Mal: Problem mit NetSend-Applet Netzwerkprogrammierung 5
C Applet <> Servlet Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
D Verbindung zu Geräten mit gleicher IP aber in unterschiedlichen VLans aufbauen Netzwerkprogrammierung 2
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
IAmFloppy Socket Nachstellen der Verbindung Netzwerkprogrammierung 6
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
S Bluetooth Verbindung zwischen Android app und Raspberry Pi 3 Netzwerkprogrammierung 1
S Peer2Peer Verbindung trotz NAT Netzwerkprogrammierung 2
T VPN-Verbindung über Java Netzwerkprogrammierung 4
Aruetiise Socket Verbindung Überprüfen Netzwerkprogrammierung 18
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
M Verbindung zwischen zwei Pc in dem Selben Netzwerk Netzwerkprogrammierung 8
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
S FTP Verbindung zu einem BS2000 Großrechner mit Commons Net Netzwerkprogrammierung 0
F Einfache Socket Verbindung Netzwerkprogrammierung 2
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
I Swing hängt sich auf bei Verbindung zum Server Netzwerkprogrammierung 3
P RMI Hohe CPU Last RMI Verbindung Netzwerkprogrammierung 4
J Pc - Handy Verbindung? Netzwerkprogrammierung 3
M Socket 2x Proxy multithread-server mit Cross Verbindung Netzwerkprogrammierung 0
T Verbindung zum Server fehlgeschlagen Netzwerkprogrammierung 7
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
T Socket Bidirektionale Verbindung mit Sockets Netzwerkprogrammierung 8
N (TCP) Verbindung ohne Portforwarding Netzwerkprogrammierung 12
N Lan-Verbindung erstellen Netzwerkprogrammierung 2
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
E Verbindung zu SQL-Datenbank auf einem Server Netzwerkprogrammierung 13
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
V NullPointerException bei Verbindung zu RabbitMQ-Server Netzwerkprogrammierung 4
B FTP commons net verschlüsselte verbindung Netzwerkprogrammierung 11
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7
S SVNKit - Verbindung zum Repository trennen? Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben