Witam.
Piszę program w oparciu o mechanizm RMI i mam problem na etapie implementacji interfejsu po stronie serwera. Kod:

import java.io.*;
import java.net.*;
import java.rmi.*;
import java.rmi.server.*;
import javax.swing.*;
import interfaces.*;

public class Server implements ComputerManagment {
    Server () throws RemoteException 
    {
        UnicastRemoteObject.exportObject(this, 0);
    }
    public void Hello() throws RemoteException
    {
        System.out.println("Hello World Sieciowo ;)");
    }
    public static void main(String[] args) throws RemoteException, MalformedURLException, IOException {
            ComputerManagment engine = new Server();
            new ServerSocket(1099);
            Naming.rebind("//127.0.0.1:1099/Shutdown",engine);
            JOptionPane.showMessageDialog(null, "Serwer zainicjowany", "Informacja", JOptionPane.INFORMATION_MESSAGE);
    }
}

ComputerManagment to interfejs dziedziczący po Remote, którego będę używał do definiowania metod zdalnych - ale to później, jak już się uda uporać z początkowymi problemami.
Kodu niewiele, bo to w zasadzie początek ;) Uruchamiam program (oczywiście rmiregistry pracuje w tle), coś się niby próbuje liczyć ale po pewnym czasie dostaję wyjątek:

Exception in thread "main" java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
        java.net.SocketTimeoutException: Read timed out
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:286)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
        at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
        at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
        at java.rmi.Naming.rebind(Naming.java:160)
        at Server.main(Server.java:29)
Caused by: java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
        at java.io.DataInputStream.readByte(DataInputStream.java:248)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:228)
        ... 5 more

Wydaje się więc, że program nie może otrzymać dostępu do zadanego portu. Miałem nadzieję, że utworzenie obiektu ServerSocket(1099) załatwi sprawę jednak nic z tego (bez tego fragmentu otrzymywałem "refused connection" - co w sumie było dość logiczne). Mam na swoim komputerze serwer Apache (w pakiecie WAMP) - tam ustawienie portu, do którego później się odwołuję w programie też nie pomaga. Firewall na potrzeby testów wyłączony całkowicie - również ten systemowy. Prosty skaner portów pokazuje, że zadany port (np. 1099) jest dostępny.

Nie wiem, co robię źle - proszę więc o pomoc ;) To moje pierwsze kroki w programowaniu sieciowym, więc mogłem coś pokręcić - jeżeli ktoś naprowadziłby mnie na dobrą drogę byłbym wdzięczny ;)

EDIT:
Kod zmieniłem na:

public static void main(String[] args) throws RemoteException, MalformedURLException, IOException {
            Registry a =LocateRegistry.createRegistry(1099);
            ComputerManagment engine = new Server();
            a.rebind("//127.0.0.1:1099/Shutdown",engine);
            JOptionPane.showMessageDialog(null, "Serwer zainicjowany", "Informacja", JOptionPane.INFORMATION_MESSAGE);
    }

...i wygląda na to, że działa w porządku bez uruchamiania nawet rmiregistry.exe - nie rzuca mi żadnym wyjątkiem, wyświetla komunikat - wygląda w porządku, przynajmniej do czasu, aż zabiorę się do programowania klienta. Heh - nieco nietypowa pora na rozwiązywanie takich problemów ale grunt, że chyba dobrze udało mi się to napisać ;)

Temat w takim razie nieaktualny ;)

Pozdrawiam.