29. november 2004 - 21:32Der er
18 kommentarer og 1 løsning
Hjælp til RMI, og hvordan
Hejsa allesammen
Nu har jeg kigget på RMI, og prøvet at lege med det et stykke tid. Jeg skal bruge det til vores 3-4 semesters projekt på datamatiker uddannelsen. Vores projekt er et kortspil som skal spilles over netværk. Og der skal sendes og modtages, både fra serveren og klienten. Er RMI det rigtige valg, eller skal jeg vælge sockets istedet for. Det som jeg har store problemer med, er RMI delen. I vores projekt har vi lavet langt størstedelen af koden, men det med RMI driller os. Vi har en controller klasse hvor der er de metoder som der skal kaldes, men hvordan kalder jeg dem over netværket. Det kan jeg ikke rigtig finde ud. Jeg har rodet meget med feks en ServerImpl, en Server og så en test klasse ved siden af. Men jeg kan ikke hitte ud af det. Ikke det med Impl klassen, men det med Naming.rebind og hvad der skal stå der.....
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
takker... jeg havde set den første af dine artikler, men ikke den om RMI avanceret. Jeg tror det løser mine problemer, ellers vil jeg lige smide et spørgmål mere i denne tråd.
Jow, altså, server skal det meste af tiden sende til klient. Men den skal også kunne modtage fra klient på nogle tidspunkter, uden den har spurgt klienten om data.
Umiddelbart tror jeg at det vil passe bedst hvis X clients connecter til 1 RMIRegistry/Server, at clients sender normalt til server og at server sender til lient via callback.
så har jeg fået leget med det, og jeg tror jeg har fundet den gyldne vej :-) Men jeg har lidt problemer med at teste det. Jeg smider kun koden til serveren i første omgang, for det er her jeg har problemet.
package common; import java.rmi.*;
public interface MyServer extends Remote{ public void join(MyClient c, int ip, String Alias) throws RemoteException; public void unJoin(MyClient c) throws RemoteException; public void inviterSpiller(String spiller) throws RemoteException; } ---------------------------------------------------------------------------
public class FixedPortRMISocketFactory extends RMISocketFactory{ private static int socketNumber = 60000; // lav normal udgående socket public Socket createSocket(String host, int port) throws IOException { System.out.println("Connection port : " + port); return new Socket(host, port); }
public ServerSocket createServerSocket(int port) throws IOException { if(port == 0) { socketNumber++; port = socketNumber; } System.out.println("Listening port : " + port); return new ServerSocket(port); } }
Jeg har ingen problemer med at kompile det, men jeg vil prøve at køre det, så går jeg som beskrevet i din artikel.
Jeg har lavet en build bat som kører uden problemer. Men når jeg laver server.bat og kører den, får jeg denne fejl "Exception in thread "main" java.lang.NoClassDefFoundError:"
og jeg har også prøvet at køre den fra jbuilder, og der siger den det her
java.security.AccessControlException: access denied (java.lang.RuntimePermission setFactory) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269) at java.security.AccessController.checkPermission(AccessController.java:401) at java.lang.SecurityManager.checkPermission(SecurityManager.java:524) at java.lang.SecurityManager.checkSetFactory(SecurityManager.java:1587) at java.rmi.server.RMISocketFactory.setSocketFactory(RMISocketFactory.java:98) at server.ServerMain.<init>(ServerMain.java:28) at server.TestServer.main(TestServer.java:16) Exception in thread "main"
Desuden... hvor skal den socket.policy fil ligge? i samme bibliotek som class filerne til server?
der sneg sig en ligge fejl ind da jeg skrev om min server.bat ligefør. Noget med tekstombrydning og notepad :-) men sådan her ser den ud, og jeg kan ikke lige forstå hvad du mener med -classpath mellem <sti>\java og <sti>\server.jar
rem Angiv classpath til jar fil rem Angiv policy fil rem Angiv serverens eksterne navn c:\j2sdk1.4.2_04\bin\java c:\projekt\kortspil\src\server.jar -Djava.security.policy=c:\projekt\kortspil\src\socket.policy -Djava.rmi.server.hostname=xxx.domain.dk server.TestServer
Nu fik jeg så en masse fejl bagefter, men jeg kigger på det.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.