Avatar billede lundsfryd Nybegynder
19. oktober 2001 - 10:42 Der er 12 kommentarer og
1 løsning

RMI på Linux - connection refused

Hej,

Jeg har lidt problemer med at tilgå en RMI-server, der ligger på en Linux-maskine. Det undrer mig lidt, da jeg godt kan køre få tingene til at virke, hvis jeg kører serveren på en Windows-maskine. Derudover kan jeg også få det til at virke, hvis jeg kører klienten lokalt på den Linux-maskine, hvor RMI-serveren også ligger.

Følgende fejl kommer ved kørsel af klienten:

java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
        java.net.ConnectException: Connection refused: no further information

Jeg poster gerne lidt kode, hvis det ønskes.
Avatar billede logical Nybegynder
20. oktober 2001 - 08:19 #1
Det er da klart, du referer til 127.0.0.1 (Som altid er dig selv) når du kalder serveren, ret det til hostname på din serverstub. Hvis du bruger registry, så sørg for at det er den du slår op i.
Avatar billede lundsfryd Nybegynder
20. oktober 2001 - 11:53 #2
logical >> Jeg forstår ikke, hvad du mener :)

Hvorfor er det logisk, at den har en helt anden opførsel på Linux end på Windows?

Jeg bruger rmiregistry - hvordan \"sørger jeg for, at det er den, jeg slår op i\"?
Avatar billede logical Nybegynder
21. oktober 2001 - 21:42 #3
Det lyder som om, at det kun har kørt når både klient og server har kørt på samme maskine. Det  er ikke noget med Linux/Windows.

Din server stub har kode a la:
String name = \"//localhost/Compute\";
RMIIF rmiif = new RMIObject();
Naming.rebind(name, rmiif);

Og din klient har kode a la:
String name = \"//localhost/Compute\";
RMIIF rmiif = (RMIIF) Naming.lookup(name);

Ret navnet til //dit hostnavn/Compute

Hostnavn er selvfølgelig navnet på din server, hvor du også kører rmiregistry
Avatar billede lundsfryd Nybegynder
21. oktober 2001 - 21:50 #4
> Det lyder som om, at det kun har kørt når både
> klient og server har kørt på samme maskine.

Det har det - som jeg skriver, virker det fint på f.eks. 2 Windows-maskiner. Når serveren så flyttes over på Linux, har vi balladen.
Avatar billede logical Nybegynder
21. oktober 2001 - 21:58 #5
Yep, men prøv at kigge på ovenstående, det er fordi du beskriver i din kode, at dit rmiregistry kører på samme maskine som klienten, og det gør det som regel ikke.
Avatar billede lundsfryd Nybegynder
21. oktober 2001 - 22:03 #6
Okay, jeg implementerer dit forslag så snart jeg for mulighed for det (i morgen).

Er der noget problem i at bruge IP-nummer i stedet for hostname?
Avatar billede logical Nybegynder
22. oktober 2001 - 07:52 #7
Hostname bliver alligevel lavet om til IP nummer, så nej :-)
Avatar billede lundsfryd Nybegynder
22. oktober 2001 - 10:13 #8
Jeg har nu haft lejlighed til at sammenligne min kode med dit forslag - og umiddelbart synes jeg, at de minder meget om hinanden i forvejen. Jeg har skrevet noget af det her (let simplificeret):

I klient:
String serverName = \"10.40.7.61\";
MyRMIInterface myServerObject = (MyRMIInterface) Naming.lookup(\"rmi://\"+serverName+\"/MyRMIObj\");

I MyRMIObj:
Naming.rebind(\"navn\", this);
Avatar billede lundsfryd Nybegynder
22. oktober 2001 - 10:46 #9
Jeg har nu fået løst problemet - løsningen var simpelthen at ændre IP-nummeret på localhost fra 127.0.0.1 til maskinens eksterne IP-nummer

Om dette har en dårlig indflydelse på de øvrige applikationer, der benytter maskinens netværk ved jeg ikke, men indtil videre virker det :-)
Avatar billede logical Nybegynder
22. oktober 2001 - 10:47 #10
Hrm, kan du gøre mig den tjeneste, at fortsætte dit stacktrace fra toppen.
(Jeg går ud fra, at du starter klienten med policy file etc....)
Avatar billede logical Nybegynder
22. oktober 2001 - 10:49 #11
Jamen, det var godt det kom til at virke. Jeg vil dog på det kraftigste fraråde dig at have mappet localhost til andet end 127.0.0.1, men det finder du nok ud af.
Avatar billede lundsfryd Nybegynder
24. oktober 2001 - 13:05 #12
Jeg har nu fundet en mere autoriseret løsning - simpelthen lige at sætte flg. parameter på, når jeg kører serverprogrammet (ud over mit policy-sjov, selvfølgelig):

-Djava.rmi.server.hostname=ip-nummer

På den måde kan man få den til at benytte det IP-nummer, som man vil have den til.
Avatar billede logical Nybegynder
24. oktober 2001 - 13:14 #13
Jamen, det troede jeg jo også du gjorde :-)
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