IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Windows Forms Discussion :

[C#] Reception de donnée reseau


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut [C#] Reception de donnée reseau
    Slt. J'ai un petit problême. Je fais un petit jeu en reseau et je coince

    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
    		private void Reception(IAsyncResult iar)
    		{
    			Socket bidule =(Socket) iar.AsyncState;
    			int nb = bidule.EndReceive(iar);
    			if(nb>0) //---Si on reçoit qqch---//
    			{
    				if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="My name is...")//---Enregistre le nom---//
    				{
    					this.j2.name=Encoding.Unicode.GetString(this.MyBuff,0,nb);
    					MessageBox.Show(this.j2.name);
    					//this.j2.couleur=Encoding.Unicode.GetString(this.MyBuff,0,nb);					
    				}
     
    				if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="Prêt...")//---Signale de synchro---//
    				{
    					this.statusBar1.Text="Votre correspondant est prêt... on attend plus que vous";
    					this.start2=1;
    				}
     
    				if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="Le client s'est déconnecté")
    				{					
    					this.MyServer.Close();
    					this.MyClient.Close();
    					this.MyFlag=0;
    				}
     
    				if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="Déconnection")
    				{					
    					this.MyFlag=0; //---Se replacer en mode monopc---//
    				}
    				this.textBox_chat2.Text=(Encoding.Unicode.GetString(this.MyBuff,0,nb));
    				InitialiserReception(bidule);
     
    			}
    			else //---On ne reçoit rien---//
    			{
    				bidule.Shutdown(SocketShutdown.Both);
    				bidule.Close();
    			}
    		}
    Quand il détecte "My name is..." j'aimerais qu'il prenne les données qui seront envoyées juste après pour le stocker. En gros le My name is dit "Attention je t'envois le nom stocke le...Détecter le my name is, c'est ok, mais comment receptionner de nouveau les données dans le même if...? Ca ne doit pas être très dur, mais je ne comprend pas encore parfaitement le systeme ... HELP

    Merci.
    while(1)printf("BUG");

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    il faut que te reproduise le meme schéma que pour la réception principale c a d que tu relances une écoute asynchrone et que tu stockes ton message à ce moment la.

    C'est une premiere solution et c'est la plus complexe .

    La deuxieme c'est de te mettre en attente du message de maniere synchrone et comme ça tu peux tout faire dans le if .

    Les deux méthodes ont leurs avantages et leurs inconvenients.

    Sinon plus que de faire des comparaisons de chaine de caractere pour ne passes tu pas un int ou une enumération ,cela éviterais les aléas de la manipulation de chaine de caractere. (qui je te l'accorde ne sont pas nombreux en C# mais bon ce n'est pas le cas dans d'autre langage et on sais jamais .)
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  3. #3
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Merci de ta réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="My name is...")//---Enregistre le nom---//
    				{
     
    					Socket bidule2 =(Socket) iar.AsyncState;
    					int nb2 = bidule2.EndReceive(iar);
    					this.j2.name=Encoding.Unicode.GetString(this.MyBuff,0,nb);
    					MessageBox.Show(this.j2.name);
     
    				}
    Ca plante sur la ligne int nb2 = bidule2.EndReceive(iar); lors de l'éxécution, mais il compile.... Je ne sais pas si j'ai bien fais ce que tu m'a dis je suis un peu perdu la ...
    while(1)printf("BUG");

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    il te manque toute la façon de récup des données asynchrone.

    il faut que tu refasse une méthode de rappel et c'est dans cette méthode que tu récupereas les données que tu veux .

    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
     
    private void Reception(IAsyncResult iar)
          {
             Socket bidule =(Socket) iar.AsyncState;
             int nb = bidule.EndReceive(iar);
             if(nb>0) //---Si on reçoit qqch---//
             {
                if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="My name is...")//---Enregistre le nom---//
                {
                   socketServer..BeginReceive(MyBuf,0,MyBuf.Length,SocketFlags.none,new AsyncCallback(ReceptionName,socketServer);             
                }
     
                if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="Prêt...")//---Signale de synchro---//
                {
                   this.statusBar1.Text="Votre correspondant est prêt... on attend plus que vous";
                   this.start2=1;
                }
     
                if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="Le client s'est déconnecté")
                {               
                   this.MyServer.Close();
                   this.MyClient.Close();
                   this.MyFlag=0;
                }
     
                if(Encoding.Unicode.GetString(this.MyBuff,0,nb)=="Déconnection")
                {               
                   this.MyFlag=0; //---Se replacer en mode monopc---//
                }
                this.textBox_chat2.Text=(Encoding.Unicode.GetString(this.MyBuff,0,nb));
                InitialiserReception(bidule);
     
             }
             else //---On ne reçoit rien---//
             {
                bidule.Shutdown(SocketShutdown.Both);
                bidule.Close();
             }
          } 
     
    private void ReceptionName(IAsyncResult iar)
          {
             Socket bidule =(Socket) iar.AsyncState;
             int nb = bidule.EndReceive(iar);
             if(nb>0) //---Si on reçoit qqch---//
             {
                   this.j2.name=Encoding.Unicode.GetString(this.MyBuff,0,nb);
                   MessageBox.Show(this.j2.name);
                   //this.j2.couleur=Encoding.Unicode.GetString(this.MyBuff,0,nb);               
             }
             else //---On ne reçoit rien---//
             {
                bidule.Shutdown(SocketShutdown.Both);
                bidule.Close();
             }
          }
    ainsi tu récuperas tes infos .

    Un tuto les fonction asynchrones :
    http://vincentlaine.developpez.com/t...ketasynchrone/
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  5. #5
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Merci !
    while(1)printf("BUG");

  6. #6
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    pas de quoi
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [socket] reception des données.
    Par flocks dans le forum Réseau
    Réponses: 3
    Dernier message: 23/04/2006, 15h47
  2. Réponses: 3
    Dernier message: 04/10/2005, 17h24
  3. Réponses: 4
    Dernier message: 02/06/2005, 13h08
  4. Reception des données en paquet
    Par royrremi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/05/2004, 19h52
  5. developpement base de données reseau
    Par koolkris dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/02/2004, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo