Klient i serwer w sieci lokalnej

0

Chciałbym napisać w Javie prostego klienta i serwer. Mam taki kod

package server;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server
{
    
    public static void main(String[] args) throws IOException
    {
        int port = 11235;
        ServerSocket sSocket;
        sSocket = new ServerSocket(port);
        System.out.println("Waiting for lucky client...");
        Socket cSocket = sSocket.accept();
        PrintWriter toClient = new PrintWriter(cSocket.getOutputStream(), true /*autoflash*/);
        toClient.println("You were the first one to connect, you win!");
        cSocket.close();
        sSocket.close();
    }
}
package client;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;

public class Client
{
    public static void main(String[] args) throws IOException
    {
        final int port;
        final String host;
        if (args.length == 0)
        {
            host = "localhost";
            port = 11235;
        }
        else if (args.length != 2)
        {
            System.err.println("Usage: java Client host port");
            return;
        }
        else {
            try {
                port = Integer.parseInt(args[1]);
                host = args[0];
            } catch (Exception ex)
            {
                System.err.println("Usage: java Client host port");
                return;            
            }
        }
        Socket s = new Socket();
        System.out.println("Trying to connect...");        
        s.connect(new InetSocketAddress(host, port), 5000);
        System.out.println("Success!");        
        Scanner fromServer = new Scanner(s.getInputStream());
        while (fromServer.hasNextLine())
        {
            System.out.println("<Server> " + fromServer.nextLine());
        }
        System.out.println("Done");        
    }
   
}

Kiedy uruchamiam oba programy na tym samym komputerze to oczywiście nie ma problemu, programy działają jak należy. Ale teraz chciałbym pójść o krok dalej i uruchomić serwer na jednej maszynie, a klienta na innej. Oba komputery działają w sieci lokalnej. Serwer stawiam na komputerze o adresie 192.168.0.7.

$ java -jar server.jar
Waiting for lucky client...
 

Na kliencie (o adresie 192.168.0.4) wywołuję

$ java -jar client.jar 192.168.0.7 11235
Trying to connect...
Exception in thread "main" java.net.NoRouteToHostException: No route to host
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
	at java.net.Socket.connect(Socket.java:546)
	at client.Client.main(Client.java:41)

No właśnie. Czemu tak się stało?
Dodam jeszcze, że na maszynie z serwerem mam włączonego wiresharka i widzę, że po uruchomieniu programu klienta następuje przesył pewnych pakietów przez sieć. Widzę na przykład paczki z wzajemnym odpytywaniem się o adresy, jakiś pakiet TCP z 198.168.0.4 do 192.168.0.7, który nie do końca wiem co zawiera, ale interesujący może się wydać pakiet ICMP z 198.168.0.7 do 192.168.0.4 z informacją "Destination unreachable (Host administratively prohibited)". Będę wdzięczny za pomoc.

0

Sprawdź, czy oba hosty się pingują. Czy nie ma włączonych firewalli. Problem jest typowo sieciowy a nie z kodem.

0

Dzięki, pomogło wyłączenie firewalla. Na czas testów jest to zadowalające rozwiązanie, ale pewnie będę musiał poczytać dokumentację iptables, żeby jednak się tak zupełnie nie odsłaniać względem całego internetu ;)

Zastanawia mnie jeszcze jak by to było gdybym chciał kiedyś napisać serwer (wykonujący trochę bardziej zaawansowane zadanie ;)) i wrzucić go do internetu. Czy jakieś firmy hostingowe dają taką możliwość?

1 użytkowników online, w tym zalogowanych: 0, gości: 1