Je ne reçois aucun datagramme en wifi

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

J'essaie de manipuler les datagrammes en multicast avec Mono. J'arrive tranquillement à faire ce que je veux sur les Mac, les PC.

Mais dès lors que j'utilise une machine en Wifi (comme un iPad, ou un PC portable) :

  • J'arrive à envoyer mes datagrammes (les autres machines le voient)
    • Edit : Non. l'iPad peut, pas le PC Portable :'(
  • Je n'en reçois aucun (des autres machines)

Si je branche le PC Portable sur Ethernet (et que je relances le programme) plus de soucis tout va bien. Le wifi et Ethernet sont sur le même réseau.

Une idée ?

J'ai pu voir que certains routeurs ne laissent pas passer les données multicast en wifi, mais comme je l'ai dit, je les envoie bien : je n'arrive juste pas à les recevoir.. un problème de routeur ?

Quelqu'un sait si les iPads ont leur propre parefeu ?

Edit : du code. (Mais je ne pense pas que le soucis vienne de là)

La 'connection' (rejoindre le groupe)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public bool JoinGroup(string groupIP, int groupPort)
{                 
  try
  {
      if (UDP != null)
          throw new UnityException("Already started"); // Huhu, grillé

      this.UDP = new UdpClient();

      this.UDP.ExclusiveAddressUse = false;

      this.UDP.Client.SetSocketOption(
          SocketOptionLevel.Socket, 
          SocketOptionName.ReuseAddress, true);

      // Pas sûr que ce soit nécessaire ce doublon..
      this.UDP.ExclusiveAddressUse = false; 

      this.UDP.Client.Bind(new IPEndPoint(IPAddress.Any, groupPort));

      IPAddress parsedGroupAddress = IPAddress.Parse(groupIP);
      this.Group = new IPEndPoint(parsedGroupAddress, groupPort);

      this.UDP.JoinMulticastGroup(parsedGroupAddress, TTL); // TTL : constant (20~50)
      //UDP.MulticastLoopback = true;
      this.UDP.MulticastLoopback = false;
                  
      GUILog.Add("Group joined", Color.green);
  }
  catch (System.Exception e)
  {
      this.UDP = null;
      GUILog.Add("Error: " + e.Message, Color.red);
  }

  return (this.UDP != null);
}

Envoi et reception :

1
2
3
4
5
6
// Envoi (appelé en boucle pour tester)
this.UDP.Send(bytes, bytes.Length, this.Group);

// Reception (appelée en boucle)
this.LastReceivePoint = new IPEndPoint(this.Group.Address, this.Group.Port);
this.data = this.UDP.Receive(ref this.LastReceivePoint);

Édité par SylafrsOne

C'est en se plantant qu'on devient cultivé.

+0 -0
Auteur du sujet

Solution, pour le coup : utiliser le broadcast (pour le moment, en fait, ça ne me dérange pas tant que ça.. même si ça ne répond pas à la question.. Je laisse le topic en suspens et non résolu, si vous avez une idée)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public bool JoinBroadcast(int port)
{
  try
  {
      if (this.HasJoined)
          throw new UnityException("Already joined");

      this.broadcasting = true; // dans JoinGroup : mis à false

      this.UDP = new UdpClient();

      this.UDP.ExclusiveAddressUse = false;

      this.UDP.Client.SetSocketOption(
          SocketOptionLevel.Socket, 
          SocketOptionName.ReuseAddress, true);

      this.UDP.ExclusiveAddressUse = false;

      this.UDP.Client.Bind(new IPEndPoint(IPAddress.Any, port));
#if VERBOSE
      GUILog.Add("UDP Port opened", Color.green);
#endif
      this.GroupAddress = IPAddress.Broadcast;
      this.Group = new IPEndPoint(this.GroupAddress, port);

      this.UDP.EnableBroadcast = true;
#if VERBOSE
      GUILog.Add("Broadcast joined", Color.green);
#endif
  }
  catch (System.Exception e)
  {
      UDP = null;
      GUILog.Add("Error: " + e.Message, Color.red);
  }

  return this.HasJoined;
}

C'est en se plantant qu'on devient cultivé.

+0 -0

J'ai l'impression que ton routeur Wifi jette silencieusement les paquets que tu envoies sur le réseau local, sauf ceux en broadcast. Ce serait possible ?

Dans le setup où tu envoies les paquets mais que tu ne reçois pas de réponse, est-ce que la machine destinataire reçoit bien les datagrammes ?

Canis Lupus pour vous servir

+0 -0
Auteur du sujet

est-ce que la machine destinataire reçoit bien les datagrammes ?

Oui, c'est ce que je voulais dire par "les autres machines le voient"

Ce serait possible ?

C'est la question que je me pose, en fait..

C'est en se plantant qu'on devient cultivé.

+0 -0

Les autres machines sont en filaire, ou en Wifi ?

Étant donné que c'est de l'UDP, il n'y a pas de notion de connexion. Autrement, j'aurais pensé à un truc du style « le routeur bloque parce qu'aucune connexion n'est ouverte, il ne la voit pas » mais ça ne tient pas ici. Tu observes ce comportement avec d'autres applications qui utilisent UDP ? (Typiquement des jeux vidéos en réseau local)

Canis Lupus pour vous servir

+0 -0
Auteur du sujet

Je ne connais pas beaucoup de jeux qui utilisent le multicast (je suppose qu'ils pourraient l'utiliser pour détecter les machines présentes dans le réseau local.. ce que j'essaie de faire, en fait (refaire une sorte de SSDP, en fait))

J'ai essayé les différents cas possibles : deux PC en filaire, un iPad en wifi et un portable en wifi.

Si la question était de savoir si les appareils étaient du coup dans des réseaux différents (un pour le wifi, l'autre pour le filaire), non : ce n'est pas ça..


Arf, désolé, j'avais mal compris.. ..je ne sais pas quels jeux/applis font ça et si je les ai sous la main pour tester :/

Édité par SylafrsOne

C'est en se plantant qu'on devient cultivé.

+0 -0

Lance un wireshark sur ton pc portable, tu filtres la sortie avec ton port d'émission/réception du datagrame (ipproto.port ou un truc comme ça), et tu vois si c'est pas ton appli qui déconne (genre une IP mal configurée à un endroit)

+0 -0
Auteur du sujet

Oky pas bête, j'ai lancé wireshark sur le fixe, mais pas le portable, je ferai ça :)

Je ne peux pas le faire de suite (alors je met le thread en stand by ^^' désolé )

C'est en se plantant qu'on devient cultivé.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte