Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1676 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [c#] - Erreur TCPListener

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c#] - Erreur TCPListener

n°1858067
skyline86
Posté le 05-03-2009 à 16:12:48  profilanswer
 

Bonjour, je fais un programme qui écoute des ports TCP puis qui insère les données reçues dans une base de données.
 
J'ai un problème quand j'ai beaucoup de trame qui arrive en même temps.
 
Je crée un Thread par port.
 
Voici ma classe :
 

Citation :


        private int tempCpt = 0;
        private MySQL maConnexion;
        private TcpListener monListener = null;
        private TcpClient monClient = null;
        private Boitier monBoitier = null;
        private int portTCP;
        private NetworkStream ns;
        private Thread monThread = null;
        private byte[] data;
        private int recv;
        private Principale monForm;
        private delegate void affichageLog(string msg);
 
        private DateTime dateTime;
        private string longitude;
        private string latitude;
        private int azimut;
        private int speed;
        private int idEvenement;
        private int oldIDEvenement;
         
 
        public TCPConnexion(Principale form, MySQL connexion , Boitier boitier)
        {
            this.maConnexion = connexion;
            this.monBoitier = boitier;
            this.portTCP = monBoitier.get_port();
            this.monForm = form;
            this.monListener = new TcpListener(portTCP);
            this.monListener.Start();
 
            // Acceptation d'une nouvelle connexion
            this.monClient = this.monListener.AcceptTcpClient();
            ns = this.monClient.GetStream();
             
            //lancement de l'écoute
            this.ecouter();
        }
 
        private void ecouter()
        {
            try
            {
                if (monClient.Connected)
                {
                    // Création et lancement d'un nouveau Thread
                    monThread = new Thread(recupData);
                    monThread.Start();
                }
                else
                {
                    MessageBox.Show("Erreur de connexion : port : " + portTCP);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erreur TCPConnexion Port : " + portTCP + " : " + ex.ToString());
            }
        }
 
        /* **********************************************************
         * Récupération des données de la trame
         * ******************************************************** */
        private void recupData()
        {
            while (true)
            {
                data = new byte[1024];
                recv = ns.Read(data, 0, data.Length);
 
                if (recv == 0)
                {
                    break;
                }
                else
                {
                    string resultat = "";
                    for (int i = 0; i < recv; i++)
                    {
                        if (data[i] == 13)
                        {
                            if (resultat.StartsWith("\n" ))
                            {
                                resultat = resultat.Substring(1);
                            }
                            insertion(resultat);
                            monForm.lb_log.BeginInvoke(new affichageLog(log), new object[] { resultat });
                            resultat = "";
                        }
                        else
                        {
                            resultat = resultat + Encoding.ASCII.GetString(data, i, 1);
                        }
                    }
                    ns.Write(data, 0, recv);
                }
                 
            }
        }


 
J'ai une erreur

Citation :

Impossible de lire les données de la connexion de transport : Une connexion existante a dû être fermée par l'hôte distant.

sur la ligne

Citation :

recv = ns.Read(data, 0, data.Length);


 
Cette erreur arrive au bout d'un moment mais elle est complètement aléatoire.  Souvent j'ai pu insérer une centaine de trame dans la base et ensuite l'erreur survient et plante mon programme. Mais certaine fois le programme ce fige et je n'ai pas d'erreur mais j'ai fais des log et il plante toujours sur la même ligne donc je ne comprend pas.
 
Est ce que quelqu'un peut me dire ce que je fais de mal ???
 
Merci d'avance
 
Cordialement

mood
Publicité
Posté le 05-03-2009 à 16:12:48  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [c#] - Erreur TCPListener

 

Sujets relatifs
erreur de boucleVC++ : erreur LINK1104
Erreur MySQL ?erreur sur boucle oracle
Erreur dans une variableErreur d'importation de fichier excel dans une nouvelle base access.
[Solution] KDevelop et Erreur "No rule to make target"Erreur de script
[MySQL] erreur de syntaxe ...Eclipse, mingw et erreur not binary found
Plus de sujets relatifs à : [c#] - Erreur TCPListener


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR