OVH Cloud OVH Cloud

[RMI] problème de création d'un serveur sous Linux Ubuntu

15 réponses
Avatar
peipito
Bonjour,

J'ai cr=E9e une application RMI client serveur toute simple =E0 des fins
de test.

L'environnement informatique est compos=E9 d'un pc sous Linux Ubuntu et
d'un pc sous XP.

Lorsque que j'utilise l'application client et serveur sur le m=EAme pc
tout fonctionne.
Lorsque que j'utilise l'application client sous le pc Linux et le
Serveur sous Windows tout fonctionne =E9galement.

Lorsque le serveur est sous Linux et le PC sous windows, alors le
logiciel ne fonctionne plus.

Si quelqu'un =E0 une id=E9e je suis preneur .

merci

5 réponses

1 2
Avatar
peipito
Oui le ping fonctionne que je donne l'adresse ip ou le nom de machine.

Je te montre un bout de code source : ( L'adresse de la machine linux
est 192.168.1.11)

Pour l'application serveur sous linux

Naming.rebind(
"rmi://192.168.1.11:1099/CalculatorService", c); // J'aurai pu mettre
localhost ici le rmiregistry etant lance sur la meme machine
} catch (Exception e) {
System.out.println("Trouble: " + e);
}

Pour le client sous Windows

Calculator c = (Calculator)
Naming.lookup("rmi://192.168.1.11/CalculatorService");

Pour la petite histoire j'ai un serveur tomcat sur 192.168.1.11 et je
peux acceder a mes sites sans probleme depuis mon pc sous windows.



Insitu wrote:
"peipito" writes:

voici l'exception releve

java.rmi.RemoteExceptionjava.rmi.ConnectException:
Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: Connection refused: connect


C'est trés clair: la connexion est refusée ce qui signifie qu'aucune
socket n'écoute l'endroit recherché. Un truc qui m'étonne beaucoup,
c'est l'adresse 127.0.1.1 !!
Normalement, 127.0.0.1 est réservé pour identifier 'localhost', c'est
à dire la machine courante ou plus précisèment l'interface locale ( lo
sous linux) du système courant. N'y aurait il pas une confusion dans
le nommage/adressage des machines ?

Le client essaye de se connecter a
une adresse bizarre très probablement localhost et donc il ne trouve
pas le serveur qui est lancé sur une autre machine. Est ce que les
noms de machines sont correctement définis dans les OS ? Est ce que le
ping fonctionne ?


cordialement,

insitu.



Avatar
Insitu
"peipito" writes:

Oui le ping fonctionne que je donne l'adresse ip ou le nom de machine.

Je te montre un bout de code source : ( L'adresse de la machine linux
est 192.168.1.11)



C'est quoi l'adresse 127.0.0.1 qui apparaît dans le stacktrace ?

Pour l'application serveur sous linux

Naming.rebind(
"rmi://192.168.1.11:1099/CalculatorService", c); // J'aurai pu mettre
localhost ici le rmiregistry etant lance sur la meme machine
} catch (Exception e) {
System.out.println("Trouble: " + e);
}



Extrait de la javadoc (java.rmi.Naming):
" The Naming class provides methods for storing and obtaining references
to remote objects in a remote object registry. Each method of the
Naming class takes as one of its arguments a name that is a
java.lang.String in URL format (without the scheme component) of the
form:

//host:port/name "

Est-il possible de voir le code complet ? (éventuellement par mail)

cordialement,

insitu.

Avatar
peipito
J'ai finalement supprimer mon XP et je l'ai remplacé par une UBUNTU
Desktop.

J'ai recompiler mon fichier et relancer le client.

Voici l'erreur que je recupere :

java.rmi.ConnectException: Connection refused to host: 127.0.1.1;
nested exception is:
java.net.ConnectException: Connection refused
at
sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
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(RemoteObje ctInvocationHandler.java:179)
at
java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocation Handler.java:132)
at $Proxy0.sub(Unknown Source)
at CalculatorClient.main(CalculatorClient.java:8)
Caused by: java.net.ConnectException: Connection refused
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:366)
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(RMIDirectSocket Factory.java:22)
at
sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocket Factory.java:128)
at
sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
... 7 more
Avatar
Insitu
"peipito" writes:

J'ai finalement supprimer mon XP et je l'ai remplacé par une UBUNTU
Desktop.

J'ai recompiler mon fichier et relancer le client.

Voici l'erreur que je recupere :

java.rmi.ConnectException: Connection refused to host: 127.0.1.1;


Franchement, je ne comprends pas d'où vient cette adresse ?!

insitu.

Avatar
mikkel.kamstrup
Insitu wrote:
"peipito" writes:

J'ai finalement supprimer mon XP et je l'ai remplacé par une UBUNTU
Desktop.

J'ai recompiler mon fichier et relancer le client.

Voici l'erreur que je recupere :

java.rmi.ConnectException: Connection refused to host: 127.0.1.1;


Franchement, je ne comprends pas d'où vient cette adresse ?!

insitu.


I had this exact problem too. I changed the line in my /etc/hosts from:
127.0.1.1 <my_machine_name>

to:
130.225.24.96 <my_machine_name>

My take on the problem is as follows: The java rmi registry gets a
Naming.lookup request, it resolves the request and returns the ip to
the machine running the requested service. Since my machine name mapped
to 127.0.1.1 in /etc/hosts it returned this ip => other machines
running remote methods try and invoke them on 127.0.1.1.


1 2