Avatar billede prom Nybegynder
22. april 2002 - 23:04 Der er 5 kommentarer og
1 løsning

RMI server bag router.....

A og B prøver at etablere kontakt mellem HelloServer og HelloClient ved hjælp af RMI:
A sidder på en maskine, der er koblet til Internettet med et 56k modem.
B sidder tungt på en ADSL forbindelse sammen med sin maskine, der er koblet til Internettet gennem en router. B har ingen firewall, sidder ikke bag en proxyserver, så jeg kan ikke se at det er et tunnelproblem.

Når A kører HelloServer og B kører HelloClient går alt godt. Men omvendt begynder problemerne at vise sig:
B har sat sin router op så alle requests til routerens ip adresse xxx.xxx.xxx.xxx bliver ledt hen til B’s maskine. Et lille portcheckerprogram har bekræftet at A kan se at B har en port åben på port 8080.

B kan starte rmiregistry og kan starte HelloServer. B kan selv køre HelloClient uden problemer. Men når A kører HelloClient får han følgende fejlmeddelelse:

C:\javaClasses>java HelloClient xxx.xxx.xxx.xxx:8080
Exception in thread "main" java.rmi.ConnectException:
Connection refused to host: 192.168.1.2;
nested exception is:
        java.net.ConnectException: Connection timed out: connect
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:567)
        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:101)
        at HelloServer_Stub.sayHello(Unknown Source)
        at HelloClient.main(HelloClient.java:21)
Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:295)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:161)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:148)
        at java.net.Socket.connect(Socket.java:425)
        at java.net.Socket.connect(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:290)
        at java.net.Socket.<init>(Socket.java:118)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(
RMIDirectSocketFactory.java:22)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(
RMIMasterSocketFactory.java:122)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:562)
        ... 5 more

Det jeg kan udlede er at HelloClient får forbindelse til den lokale ip adresse 192.168.1.2, men så er jeg blank….. Connection timed out….

Kildekode:

import java.rmi.*; // Remote, RemoteException
public interface HelloInterface extends Remote {
    public String sayHello() throws RemoteException;
}

import java.rmi.*;
import java.rmi.server.*;
import java.net.*;

public class HelloServer implements HelloInterface {

  public HelloServer() throws RemoteException {
    UnicastRemoteObject.exportObject(this);
  }

  public String sayHello() throws RemoteException {
    return "Der er kommet svar";
  }

  public static void main(final String [] args) {
    String registryHost = "127.0.0.1";
    String port = null;
    if (args.length > 0) {
      port = args[0];
    }
    if (args.length > 1) {
      System.err.println("HelloServer [port]");
      System.exit(1);
    }
    final String registryURL = "rmi://"+ registryHost +":"+ port +"/hello";
    try {
      final HelloServer hello = new HelloServer();
      Naming.rebind(registryURL, hello);
    }
    catch (RemoteException ReEx) {
      System.err.println("Problem med Naming.rebind() "+ ReEx);
    }
    catch (MalformedURLException MaURLEx) {
      System.err.println("Ulovlig URL " + MaURLEx);
    }
  }
}

import java.rmi.*;

public class HelloClient {

  public static void main(String [] args) throws Exception {
    String host = "127.0.0.1";
    switch (args.length) {
      case 0: break;
      case 1: host = args[0]; break;
      default: System.err.println("java HelloClient [host]"); System.exit(1);
    }

    String url = "rmi://" + host + "/hello";
    HelloInterface hello = (HelloInterface) Naming.lookup(url);
    String message = hello.sayHello();
    System.out.println("HelloClient: " + message);
  }
}

Hvad skal jeg gøre?
Avatar billede mallemab Nybegynder
22. april 2002 - 23:20 #1
prøv at starte serveren med "java -Djava.rmi.server.hostname=x.y.z.v HelloServer", hvor x.y.z.v er din adsl-routers ip-adresse.
Avatar billede mallemab Nybegynder
22. april 2002 - 23:21 #2
det skal altså være den ydre ip !!
Avatar billede prom Nybegynder
22. april 2002 - 23:32 #3
Det er min kammerat der skal starte serveren, så ham skal jeg lige have fat i... Måske at han er gået i seng, så det kan være at jeg først vender tilbage i morgen.
Avatar billede mallemab Nybegynder
22. april 2002 - 23:35 #4
OK, men det skulle virke !
Avatar billede prom Nybegynder
23. april 2002 - 00:05 #5
Det sku kanon. Det er dejligt når man har siddet og bakset med et problem et stykke tid, at der så er nogen der lige har de magiske ord. Send et svar og få dine point... Dem har du fortjent... selv om de måske var lettjente...

Hvis andre mener at jeg har givet for mange point for svaret, så troede jeg faktisk at det var mere komplekst end som så... Men jeg er en glad mand...

Tak skal du ha mallemab, det kan være at jeg vender tilbage når vi skal have det til at fungere på skolen. Der sidder vi bag en firewall så stor at vi næsten ikke kan komme ind om morgenen...

Prom
Avatar billede mallemab Nybegynder
23. april 2002 - 11:28 #6
Det er bare OK
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