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