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?
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
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
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