Avatar billede dgim Nybegynder
19. maj 2003 - 12:46 Der er 24 kommentarer og
1 løsning

Server med 2ip'er og brug af RMI

Hej vi er løbet ind i et "lille" problem mht RMI. Har en server til at kører en java applikation som bruger RMI. Servern har 2 ip'er, en til internet og en til LAN. Når man vil kalde serveren fra internet siden kan man ik få forbindelse med den da den af en eller anden grund åbenbart kører RMI på LAN ip'en og ikke på den anden ip som den gerne skulle...
Det resulterer så i at man ik kan connecte fra inet siden men godt fra LAN siden. Det skulle gerne være muligt at connecte til serveren fra begge sider, hvordan løses det?

Det er lidt svært at forklare men håber at i får en idé om hvad det er der er galt... :D
Avatar billede nzc Nybegynder
19. maj 2003 - 12:59 #1
Hej!

Sidder du bag router eller proxy eller noget lignende?

NZC
Avatar billede nzc Nybegynder
19. maj 2003 - 13:00 #2
Hvis du sidder bag router skal du nat'e routeren så den ved at når en client connecter på din inet IP skal den lede kommunikationen op til den comp hvor serveren er :)
Avatar billede dgim Nybegynder
19. maj 2003 - 13:00 #3
hmm der er sat en firewall op men ellers ikke... prøver lige at slå den fra, men tror nok den er sat op så jeg skulle kunne komme igennem den
Avatar billede nzc Nybegynder
19. maj 2003 - 13:05 #4
ahh firewall :)))

læs den her artikkel http://www.javacoding.net/articles/technical/rmi-firewall.html

den er pissego :)

Husk at ligge fixedport filen og lav en factory på både server og client, så virker det :)

NZC
Avatar billede dgim Nybegynder
19. maj 2003 - 13:07 #5
tak jeg ser lige på det... håber jeg får det til at virke :)
Avatar billede dgim Nybegynder
19. maj 2003 - 13:17 #6
hmm jamen det der sker er at når man fra client siden (fra internet siden) connecter til serven så prøver den at connecte til 192.168.0.1 som er den interne IP. Så det ser ik ud til at have noget med det andet at gøre...
Avatar billede nzc Nybegynder
19. maj 2003 - 13:25 #7
hvis du vil køre gennem en firewall er det vigtigt du ved hvilken port din applikation bruger for at kunne åbne firewallen for kommunikation på ligenetop den port. Hvis du ikke gør det er du nødt til at åbne for alle porte i din firewall da RMI sammen med OS vælger en vilkårlig port at kommunikere over.

Må jeg prøve at se din kode ?
Avatar billede dgim Nybegynder
19. maj 2003 - 13:28 #8
ja her er det stykke kode som starter RMI delen

    final String registryURL = "rmi://HER_SKRIVER_JEG_MIN_INTERNET_IP/hello";
    try {
          System.out.println("Starter på registrering af server. Det kan tage tid");

          final VareServer hello = new VareServer();

          Naming.rebind(registryURL, hello);
           
        System.out.println("Vareserver klar.");
    }
    catch (RemoteException ReEx) {
      System.err.println("Problem med Naming.rebind() " + ReEx);
    }
    catch (MalformedURLException MaURLEx) {
      System.err.println("Ulovlig URL " + MaURLEx);
    }
Avatar billede nzc Nybegynder
19. maj 2003 - 13:31 #9
hvad fejl får du når du vil connecte via inet ?
Avatar billede dgim Nybegynder
19. maj 2003 - 13:42 #10
oki det her er underligt... den fejl der kommer når han prøver at connecte er:

IP: 192.168.0.1
IOException: java.net.ConnectException: Connection refused: connect
No response from 192.168.0.1. Host is down or does not exist
java.rmi.ConnectException: Connection refused to host: 192.168.0.1; nested exception is: java.net.ConnectException: Connection refused: connect

men når han så kopierede teksten og sendte den til mig lavede den ip'en om til den rigtige ip... HMMMM!
Avatar billede nzc Nybegynder
19. maj 2003 - 13:49 #11
har du en policy fil?
Avatar billede dgim Nybegynder
19. maj 2003 - 13:52 #12
øhh er ik helt med på hvad du mener... men hvis det er i projektet så nej.
Avatar billede magoo20000 Nybegynder
19. maj 2003 - 14:20 #13
Policy-filen kan se sådan ud:

grant {
// Allow everything for now
permission java.security.AllPermission;
};

Og i din serverkode kan du så indsætte
System.setSecurityManager( new RMISecurityManager() );
Avatar billede magoo20000 Nybegynder
19. maj 2003 - 14:22 #14
Du skal have policy-filen skal du have liggende sammen med dine klient classes. Så kan du starte klienten vha.

java -Djava.security.policy=simple.policy RMIClient 127.0.0.1

Hvis klient klassen hedder RMIClient og policy tekstfilen hedder simple.policy.
Avatar billede dgim Nybegynder
19. maj 2003 - 14:23 #15
jamen hvis nu jeg får en anden, som kun har et netkort og dermed også kun en IP, til at sætte serveren op så virker det som det skal... det gør det også for mig når jeg sidder på LAN siden...
Avatar billede nzc Nybegynder
19. maj 2003 - 14:32 #16
sidder du bag proxy, firewall eller router?
Avatar billede dgim Nybegynder
19. maj 2003 - 14:34 #17
bag en firewall men den har jeg lukket for at være sikker på at det ik er der problemet er... ellers er jeg koblet direkte til nettet, ingen proxy eller router
Avatar billede nzc Nybegynder
19. maj 2003 - 14:47 #18
jeg kan ikke helt forstå hvor dit problem ligger :/ kan du prøve at forklarer helt præcist hvad det er du vil og hvad det er du gør og hvad du får af fejl?
Avatar billede dgim Nybegynder
19. maj 2003 - 14:54 #19
oki skal nok prøve...

1: serverdelen af programmet sættes op på min server som har to netkort i koden sætter vi den til at starte RMI på internet IP'en 80.198.44.***

2: jeg prøver fra min PC at connecte fra LAN siden og det virker fint

3: så prøver vi ude fra nettet at connecte til 80.198.44.*** men den kommer med den fejl som jeg pastede tidligere. Tilsyneladende fordi den af en eller anden grund starter RIM på IP'en: 192.168.0.1

det skal lige siges at hvis jeg få en anden til at sætte server-delen op på en maskine med kun et netkort så virker det fint...
Avatar billede nzc Nybegynder
19. maj 2003 - 14:59 #20
man kan ikke starte RMI op på en IP. Man kan starte RMI op så den lytter på en port.

hvordan starter du RMIregistry ?
Avatar billede dgim Nybegynder
19. maj 2003 - 15:03 #21
her er en del af kode:

final String registryURL = "rmi://80.198.44.***/hello";
Naming.rebind(registryURL, hello);

hvis jeg så lige efter det skriver:

System.out.println(Naming.lookup(registryURL));

så skriver den følgende: VareServer_Stub[RemoteStub [ref: [endpoint:[192.168.0.1:3842](remote),objID:[0]]]]

hvor får den lige 192.168.0.1 fra ??
Avatar billede dgim Nybegynder
19. maj 2003 - 15:07 #22
starter det fra en bat fil hvor der står følgende.

set path=c:\j2sdk1.4.1_02\bin;.;%path%
start rmiregistry

det kan jo evt godt være at det er der den er gal?
Avatar billede dgim Nybegynder
19. maj 2003 - 19:33 #23
hmm der må da være en eller anden der kan hjælpe ?
Avatar billede m_soerensen Nybegynder
23. maj 2003 - 20:49 #24
i din bat fil skal du starte programmet op med denne linie
java -Djava.rmi.server.hostname=din eksterne ip  navnet på den java fil du vil sstarte
Avatar billede m_soerensen Nybegynder
23. maj 2003 - 21:04 #25
den linie som jeg omtaler ovenfor gør at rmi lytter på den eksterne ip i stedet for den interne. håber det virker for dig
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester