2012-10-21 20 views
9

Il seguente codice di trasmissione UDP client e server funziona correttamente quando entrambi sono sullo stesso PC. Tuttavia quando li ho su PC separati nella stessa LAN WIFI non succede nulla. Sono riuscito a ottenere una versione multicast che funziona bene sui due PC separati ma non questo :(. Ho spento i firewall su entrambi e ping con successo ciascuno da entrambi i PC.Semplice client e server di trasmissione UDP su macchine diverse

L'idea alla base di questo test è così che posso usare questo metodo in modo che un client possa trovare un server sulla LAN inviando un pacchetto di datagrammi (peer discovery). Penso che stia facendo qualcosa di sbagliato con il nome host o qualcosa del genere ma dopo una settimana di googling e test di nuove idee sono ufficialmente tutti fuori di loro :(.

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(); 
      } 
     } 
    } 
} 

chiedo solo se qualcuno può aiutare?

risposta

3

è hostname localhost? Se è così, ca n non raggiungere altri pc. È necessario modificarlo con l'indirizzo IP di destinazione.

+1

hostname è localhost, che ho indovinato potrebbe essere stato il problema. Immagino che una soluzione semplice sia trovare l'indirizzo IP del server e cambiare localhost a quell'indirizzo IP. Tuttavia, questo non fa fallire lo scopo della trasmissione UDP? Stavo lavorando all'idea che un server ascolta qualsiasi trasmissione sulla rete. Un client invia una trasmissione su una rete e il server la riceve e le risposte. Lo sto usando in modo che il client possa scoprire il server, ma dando manualmente al client l'indirizzo IP del server l'intera scoperta è ridondante. – Paul

+0

Penso, in primo luogo, che devi trasmettere alla tua rete. C'è un documento su questo. [link] (http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html) – chrome

+1

Sì, questo è il problema che sto avendo. Posso eseguire il multicast senza problemi. Esistono molti esempi client/server di broadcast UDP, ma tutti mostrano localhost per quando client e server si trovano sullo stesso computer. Non ci sono esempi per quando client e server non si trovano sulla stessa macchina :(. A meno che il client non invii il suo pacchetto a 192.168.0.0. Ingannevole ... – Paul

10

Per trasmettere effettivamente è necessario inviare il pacchetto a tutti gli IP sulla LAN. L'intervallo di IP possibili va da 0.0.0.0 a 254.254.254.254 ma per selezionare tutti quelli che è possibile scrivere: 255.255.255.255. Ma la maggior parte dei router bloccherà questo. Permetteranno qualcosa come 192.168.1.255 trasmissioni di streghe a tutti i 255 ip da 192.168.1.0 a 192.168.1.254 che è quello che ti serve, penso.

+0

che dire di 192.168.0.0 a 192.168.0.254? –

Problemi correlati