Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    UDP fonctionne en Localhost mais pas à distance
    Bonsoir à tous,

    Je découvre la programmation et j'ai déjà quelques logiciels basiques à mon actif. J'ai jamais demandé d'aide, mais là je bloque vraiment.


    Mon idée est très basique : le client envoie un message au serveur qui le renvoie à tous les clients connectés.
    Jusqu'à maintenant, tout roule en localhost.
    Le soucis, c'est quand je le teste avec un client (A) sur un autre pc : le serveur reçoit le message et l'envoie au 2é client (B) qui est en localhost et qui le reçoit bien, mais le client A ne reçoit rien du tout.
    Je suis sûr que la solution est toute bête, mais je ne trouve vraiment pas de réponse.

    Voici le code du serveur :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    [...]
     
    			  serveurBroadcast = new UdpClient(); 
    			serveurBroadcast.EnableBroadcast = true;
    			serveurBroadcast.Connect(new IPEndPoint(IPAddress.Broadcast, 5053));
     
    	[...]
    		public void ecouter()
    		{
    			//connection serveur
    			UdpClient serveur = null; 
    			serveur = new UdpClient(1523);
     
    			try
    			{
    				string ecoute ="Début de la conversation...";
    				Invoke((boitereception)afficher, ecoute);
    			}
    			catch{}
     
     
    			//boucle qui écoute
    			while (Quitter == true)
    			{
    				// IPEndPoint = reçoit les données
    				IPEndPoint client = null;
     
     
    				//attend message 
      				byte[] data = serveur.Receive(ref client);
     
    				//affichage message.
    				string message = Encoding.Default.GetString(data);
    				string msg = message;
    				try
    				{
    					Invoke((boitereception)afficher, msg);
    				}
    				catch
                                    {
    					MessageBox.Show("Impossible d'afficher le essage");
    				}
     
     
     
    				//démarre le thread d'envoi
    				theenvoie = new Thread(delegate() {envoyer(msg);});
     
    				theenvoie.Start();
     
    			}
     
    	}
     
     
    			public void envoyer(string msg)
    		{
    			//convertir textbox1 en bytes
    			byte[] msgaenvoyer = Encoding.Default.GetBytes(msg);
     
    			try
    			{
     
    			serveurBroadcast.Send(msgaenvoyer, msgaenvoyer.Length);
     
    			}
    			catch
    			{
    				MessageBox.Show("impossible d'envoyer le message");
    			}
     
    		}
     
    		//fonction qui envoie dans listbox1
    		public void afficher(string texte)
    		{
    			listBox1.Items.Add(texte);
    		}


    et le client :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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
    40
    41
    42
    private void Ecouter()
    		{
     
     
     
    			try 
    			{
    				ecoute = new UdpClient(5053);
    			}
     
    				catch
    				{
    				MessageBox.Show("impossible d'écouter le port 5053");
    			}
     
    			while (_continuer)
    			{
     
    				IPEndPoint  client = null;
    				byte[] data = ecoute.Receive(ref client);
     
    				//string add = Convert.ToString(client.Address);
     
    				//Décryptage et affichage du message.
    				string message = Encoding.Default.GetString(data);
    				string msg = message;
    				MessageBox.Show(msg); 
    				try
    				{
    					Invoke((boitereception)afficher, msg);
    				}
    				catch (Exception)
    				{}
    			}
    			try 
    			{
    				_thEcoute.Abort(); 
    			}
    			catch{}
     
     
    		}


    Mon petit doigt me dit que c'est une question de d'IP locales... Le seul moyen de parvenir au serveur est à travers l'adresse IP locale, mais j'ai beau trifouiller tout ce que je veux, pas moyen de trouver comment envoyer le message du serveur au client A avec une ip locale..

    Une âme charitable pour me sauver de mon désarrois ? :/

    Mille mercis à vous tous !

  2. #2
    Futur Membre du Club
    EDIT : j'ai réussi à faire circuler les messages du serveur aux clients grÂce à "192.168.1.255". Mais étonnamment IPAddress.Broadcast ne marche pas.

    Je ne réussis pas non plus envoyer de message à un client spécifique, même en entrant son IP à la place de "192.168.1.255".