L'envoi de paquets à 255.255.255.255 par Java DatagramSocket échoue
Je suis de la programmation d'un programme de mise en réseau en java , et je veux envoyer des Paquets à 255.255.255.255, mais il ne parvient pas , même lorsque je leur envoie à 192.168.1.255, qui, selon la sortie de la commande ifconfig , est l'adresse de diffusion. Mais quand j'envoie à mon compagnon de l'IP, il fonctionne très bien.
Voici le code de mon programme :
public class StackOverFlow {
public static void main(String[] args) {
Network net= new Network();
Scanner input= new Scanner(System.in);
while(input.hasNext())
net.sendMessage(input.nextLine());
}
}
J'ai utilisé DatagarmSocket et DatagramPacket pour ce faire , voici ma mise en œuvre du Réseau :
class Network {
DatagramSocket socket;
public Network() {
try {
socket = new DatagramSocket(8027);
socket.setBroadcast(true);
socket.connect(InetAddress.getByName("255.255.255.255"), 8027);
} catch (Exception e) {
System.err.println("Connection failed. " + e.getMessage());
}
listen();
}
public void listen() {
new Thread() {
public void run() {
while (true) {
try {
byte[] buf = new byte[1000];
DatagramPacket packet = new DatagramPacket(buf,
buf.length);
socket.receive(packet);
String message = new String(buf);
System.out.println("Recieved: " + message);
if (message.equals("end"))
return;
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
}.start();
}
public void sendMessage(String message){
byte[] buf= message.getBytes();
DatagramPacket packet= new DatagramPacket(buf, buf.length);
try{
socket.send(packet);
}catch(Exception e){
System.err.println("Sending failed. " + e.getMessage());
}
}
Aucune exception n'est levée.
Je suis dans un réseau ad hoc.
Je suis sous MAC OS X 10.6, tandis que mon compagnon est à l'aide de kubuntu 11.04.
Et voici ifconfig sortie:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::21f:f3ff:fed5:4779%en0 prefixlen 64 scopeid 0x4
inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:1f:f3:d5:47:79
media: autoselect (100baseTX <full-duplex>) status: active
supported media: autoselect 10baseT/UTP <half-duplex> 10baseT/UTP <full-duplex> 10baseT/UTP <full-duplex,hw-loopback> 10baseT/UTP <full-duplex,flow-control> 100baseTX <half- duplex> 100baseTX <full-duplex> 100baseTX <full-duplex,hw-loopback> 100baseTX <full-duplex,flow-control> 1000baseT <full-duplex> 1000baseT <full-duplex,hw-loopback> 1000baseT <full-duplex,flow-control> none
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::21d:4fff:feff:2b4d%en1 prefixlen 64 scopeid 0x5
inet 213.233.170.97 netmask 0xfffffc00 broadcast 213.233.171.255
ether 00:1d:4f:ff:2b:4d
media: autoselect status: active
supported media: autoselect
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 2030
lladdr 00:21:e9:ff:fe:bc:79:b2
media: autoselect <full-duplex> status: inactive
supported media: autoselect <full-duplex>
en2: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:1f:f3:b6:2c:be
media: autoselect status: inactive
supported media: none autoselect 10baseT/UTP <half-duplex>
vmnet1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.149.1 netmask 0xffffff00 broadcast 192.168.149.255
ether 00:50:56:c0:00:01
vmnet8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.73.1 netmask 0xffffff00 broadcast 192.168.73.255
ether 00:50:56:c0:00:08
en0 est l'appareil que j'utilise pour me connecter à mon compagnon.
Veuillez faire simple, je suis un newbie 🙂
Merci d'avance.
source d'informationauteur Pro.Hessam
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation de la radiodiffusion, vous devez l'activer
Une autre chose est que vous avez à faire assurez-vous que votre routeur est configuré de droit si les deux ordinateurs sont en deux filets. Les émissions sont généralement, par défaut, pas de routage. En outre, si vous avez un routeur ayant une connexion sans fil de l'interface et une interface câblée ces émissions peuvent ne pas fonctionner si les émissions ne sont pas activées(Il peut y avoir du matériel qui diffuse entre ces deux interfaces par défaut).
Plutôt que de connecter votre DatagramSocket à l'adresse de diffusion, juste à construire la DatagramPacket pour cible, c'est à dire
Et comme par magie, vous avez envoyé une émission. Et puis de l'attraper, de l'autre côté, juste que la fin de l'écoute sur ce port:
192.168.1.255
Il peut possible que votre machine
et la machine ne peut pas être la même
réseau.
Si je me souviens bien, vous ne pouvez pas recevoir de diffusion les adressesmais seulement envoyer à eux! Ainsi, sur le côté de réception, vous devez être à l'écoute de "votre" propriété intellectuelle en particulier.