[c#] - Erreur TCPListener

- Erreur TCPListener [c#] - C#/.NET managed - Programmation

Marsh Posté le 05-03-2009 à 16:12:48    

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

Reply

Marsh Posté le 05-03-2009 à 16:12:48   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed