Bonjour,
Je développe actuellement un mini-chat en c# pour étudier les Socket. Voilà, ce que je voudrai faire c'est un chat clients-serveur.
Le problème est côté client, j'ai fait 2 MessageBox successifs qui affiche des valeurs différentes :
MessageBox.Show("ClientSocket.Avalaible = " +ClientSocket.Avalaible); //affiche : ClientSocket.Avalaible = 49
MessageBox.Show("ClientSocket.Avalaible = " +ClientSocket.Avalaible); //affiche : ClientSocket.Avalaible = 0
je ne comprend pas! Alors que les 2 instructions se suivent
Voici en pièces jointes mes 3 Form.
Le problème se trouve dans FormDiscussion -> CheckData()
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 private void CheckData() { try { while (true) { if (ClientSocket.Connected) { if (ClientSocket.Poll(10, SelectMode.SelectRead) && ClientSocket.Available == 0) { //La connexion a été cloturée par le serveur ou bien un problème //réseau est apparu MessageBox.Show("La connexion au serveur est interrompue. Essayez avec un autre pseudo"); Thread.CurrentThread.Abort(); } //Si la socket a des données à lire if (ClientSocket.Available > 0) { string messageReceived = null; MessageBox.Show("ClientSocket.Available : " + ClientSocket.Available + " " + pseudo); MessageBox.Show("ClientSocket.Available : " + ClientSocket.Available + " " + pseudo); while (ClientSocket.Available > 0) { try { byte[] msg = new Byte[2000]; //Réception des données ClientSocket.Receive(msg, 0, ClientSocket.Available, SocketFlags.None); messageReceived = System.Text.Encoding.ASCII.GetString(msg).Trim(); MessageBox.Show("MessageReceived :"+messageReceived); //On concatène les données reçues(max 4ko) dans //une variable de la classe rtfContent += messageReceived; } catch (SocketException E) { MessageBox.Show("CheckData read" + E.Message); } } try { //On remplit le richtextbox avec les données reçues //lorsqu'on a tout réceptionné Discussion(rtfStart + rtfContent); } catch (Exception E) { MessageBox.Show(E.Message); } } } //On temporise pendant 10 millisecondes, ceci pour éviter //que le micro processeur s'emballe Thread.Sleep(10); } } catch (Exception e) { //Ce thread étant susceptible d'être arrêté à tout moment //on catch l'exception afin de ne pas afficher un message à l'utilisateur Thread.ResetAbort(); MessageBox.Show(e.Message); } }
Partager