2012-10-21 14 views
9

Poniższy kod rozgłoszeniowy UDP klienta i serwera działa poprawnie, gdy oba są na tym samym komputerze. Jednak gdy mam je na oddzielnych komputerach w tej samej sieci WIFI, nic się nie dzieje. Udało mi się sprawić, że wersja multiemisji działała poprawnie na dwóch oddzielnych komputerach, ale nie na tym :(Zablokowałem zapory ogniowe na obu komputerach iz powodzeniem przetestowałem je z obu komputerów.Prosty klient rozgłaszania UDP i serwer na różnych komputerach

Ideą tego testu jest to, że mogę używać ta metoda umożliwia klientowi znalezienie serwera w sieci LAN poprzez wysłanie pakietu datagramowego (wykrywanie peer) .Myślę, że robię coś nie tak z nazwą hosta lub czymś innym, ale po tygodniu szukania i testowania nowych pomysłów jestem oficjalnie wszystkie z nich :(.

public class Client 
{ 
    private String hostname= "localhost"; 
    private int port=1234; 
    private InetAddress host; 
    private DatagramSocket socket; 
    DatagramPacket packet; 

    public void run() 
    { 
     try 
     { 
      host = InetAddress.getByName(hostname); 
      socket = new DatagramSocket (null); 
      packet=new DatagramPacket (new byte[100], 0,host, port); 
      socket.send (packet); 
      packet.setLength(100); 
      socket.receive (packet); 
      socket.close(); 
      byte[] data = packet.getData(); 
      String time=new String(data); // convert byte array data into string 
      System.out.println(time); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 



public class Server 
{ 
    public static final int DEFAULT_PORT = 1234; 
    private DatagramSocket socket; 
    private DatagramPacket packet; 

    public void run() 
    { 
     try 
     { 
      socket = new DatagramSocket(DEFAULT_PORT); 
     } 
     catch(Exception ex) 
     { 
      System.out.println("Problem creating socket on port: " + DEFAULT_PORT); 
     } 

     packet = new DatagramPacket (new byte[1], 1); 

     while (true) 
     { 
      try 
      { 
       socket.receive (packet); 
       System.out.println("Received from: " + packet.getAddress() + ":" + 
            packet.getPort()); 
       byte[] outBuffer = new java.util.Date().toString().getBytes(); 
       packet.setData (outBuffer); 
       packet.setLength (outBuffer.length); 
       socket.send (packet); 
      } 
      catch (IOException ie) 
      { 
       ie.printStackTrace(); 
      } 
     } 
    } 
} 

prostu zastanawiasz się, czy ktoś może pomóc?

Odpowiedz

3

Czy hosta localhost? Jeśli tak, to ok n nie dociera do innego komputera. Musisz go zmienić za pomocą docelowego adresu IP.

+1

nazwa hosta to localhost, co, jak podejrzewałem, mogło być problemem. Sądzę, że prostym rozwiązaniem jest znalezienie adresu IP serwera i zmiana localhost na ten adres IP. Jednak czy nie robi to w ten sposób, aby pokonać cel transmisji UDP? Pracowałem nad pomysłem, że serwer nasłuchuje każdej emisji w sieci. Klient wysyła transmisję w sieci, a serwer ją odbiera i odpowiada. Używam go, aby klient mógł odkryć serwer, ale ręcznie podając klientowi adres IP serwera, cała sprawa jest zbędna. – Paul

+0

Myślę, że najpierw musisz nadawać do swojej sieci. Jest na ten temat dokument. [link] (http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html) – chrome

+1

Tak, to jest problem, który mam. Mogę multicastować bez problemu. Istnieje wiele przykładów klienta/serwera rozgłaszania UDP, ale każdy pokazuje serwer localhost, gdy klient i serwer znajdują się na tym samym komputerze. Brak przykładów, gdy klient i serwer nie znajdują się na tym samym komputerze :(. Jeśli klient nie wysyła swojego pakietu do 192.168.0.0. Tricky ... – Paul

10

Aby rzeczywiście nadawać, należy wysłać pakiet do wszystkich adresów IP w sieci LAN. Zakres możliwych adresów IP wynosi od 0.0.0.0 do 254.254.254.254, ale aby wybrać wszystkie z nich, możesz napisać: 255.255.255.255. Ale większość routerów zablokuje to. Pozwalają one na emisję podobną do 192.168.1.255 czarownic do wszystkich 255 ip od 192.168.1.0 do 192.168.1.254, co jest potrzebne, jak sądzę.

+0

co z 192.168.0.0 do 192.168.0.254? Czy to działa? –