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 :
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
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); }
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..
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{} }
Une âme charitable pour me sauver de mon désarrois ? :/
Mille mercis à vous tous !
Partager