Page 1 of 1

Προβλημα με MulticastSocket στη Java

Posted: Tue Dec 18, 2007 3:58 pm
by cyberpython
Προσπαθώ να φτιάξω ένα server που θα δέχεται πακέτα πολυεκπομπής, όμως όταν κατασκευάζω το MulticastSocket, όποιο port και να επιλέξω, όταν καλέσω τη μέθοδο getPort() του MulticastSocket δίνει πάντα -1 (δηλαδή η σύνδεση του socket απέτυχε).

Το περίεργο είναι οτι αν στείλο ένα μήνυμα από ένα client που τρέχει στο ίδιο μηχάνημα το λαμβάνει, αλλά αν το δοκιμάσω από διαφορετικό μηχάνημα στο τοπικό δίκτυο, τότε το μήνυμα δε φθάνει ποτέ.

Δοκιμαστικά, έγραψα ένα πρόγραμμα που κατασκεύαζε ServerSocket σε κάθε port ξεχωριστά (κάτι σαν port-scanner) για να δώ μήπως τρέχουν άλλοι servers στα ports που επιλέγω και δοκίμασα με μερικά από αυτά που ήταν ανοιχτά, αλλά πάλι τίποτα.

Έχει κανείς ιδέα τί κάνω λάθος;

(Επίσης έχω δοκιμάσει και διαφορετικές τιμές για το TTL του πακέτου που στέλνει ο client 0,1,32 αλλά χωρίς αποτέλεσμα)

Posted: Tue Dec 18, 2007 10:42 pm
by cyberpython
Να επισημάνω οτί το ίδιο συμβαίνει με όλα τα MulticastSockets και DatagramSockets που προσπαθώ να φτιάξω (πάντα επιστρέφουν port : -1).

----------------------

Βασικά βρήκα γιατί το port είναι -1. Για να πάρουμε τη θύρα στο τοπικό μηχάνημα καλούμε τη getLocalPort().


---------------------------


Λύση
Σε περίπτωση που και κάποιος άλλος αντιμετψπίσει το ίδιο πρόβλημα, η λύση είναι μόλις φτιάχνουμε ένα MulticastSocket να καλούμε τη setInterface() ή τη setNetworkInterface().


merged + edited by Punisher

Posted: Wed Dec 19, 2007 12:58 am
by tsilochr
Τι ip δίνεις στο multicastSocket?

Posted: Wed Dec 19, 2007 2:12 am
by cyberpython
Το IP δεν παίζει ρόλο, αρκεί να είναι class D - και εννοείται να στέλνουμε τα πακέτα στο ίδιο IP που έχουμε κάνει join αυτούς που θα τα παραλάβουν.

Posted: Wed Dec 19, 2007 7:11 am
by tsilochr
οκ, απλά ήθελα να βεβαιωθώ ότι πετάς μια class D IP διεύθυνση. Αυτό με τη setInterface() ή τη setNetworkInterface() δεν το έχω χρησιμοποιήσει ποτέ.

ΥΓ. Plz, είναι η ΙΡ address

Re: Προβλημα με MulticastSocket στη Java

Posted: Fri Dec 21, 2007 2:45 am
by HdkiLLeR
Κάνε μια copy paste εδώ τον κώδικα σου, είναι πάρα πολοί οι λόγοι που μπορεί να παίζει κάτι τέτοιο.