# Dotnet > Gnral Dotnet > Rseau >  Acknowledgment pour l'envoie de la prochaine socket de donnes

## samiti

Bonjour!

J'envoie une liste de commande  la partie rception, pour viter les problmes de perte de donnes j'ai pens  un mcanisme qui ne permet d'envoyer une commande que si l'autre a t reue(l'envoie se fait  travers des socket TCP/IP): donc  la rception d'une commande , le rcepteur envoie "ACK" pour dire j'ai  reue votre commande vous pouvez dsormais envoyer la deuxime, ce code marche mais l'application se coince aprs un certain temps, s'agit il de problmes lis aux thread ou  autre chose, s'il vous plais aidez moi si vous avez une autre manire de faire cela j'accepte toute proposition.

Merci beaucoup  ::): 
PS:la commande que j'envoie est form de ID et DATA c'est pour cela que j'ai utilis un fichier xml pour les envoyer



//////////////////////////////////////////////////////////////////////////////
public string SendData_ACK(Socket clientSocket, string send_data)
        {
            string[] lines = send_data.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
            int numLines = lines.Length;
            int i = 0;
           // bool contains = false;


            while (i < numLines)
            {

                bool contains = false;
                var values0 = lines[i].Split(':');

                int iNumbervalue0 = int.Parse(values0[0]);



                string xmlPathcan_send_Cmd1 = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "can_send_Cmd1.xml");

                XmlTextWriter writer2 = new XmlTextWriter(xmlPathcan_send_Cmd1, System.Text.Encoding.UTF8);
                writer2.WriteStartDocument(true);
                writer2.Formatting = Formatting.Indented;
                writer2.Indentation = 2;
                writer2.WriteStartElement("CAN_Data");




                this.createNodeCANCommand1(values0[0], values0[1], writer2); :: CREATES THE xml NODE TO BE SENT


                writer2.WriteEndElement();
                writer2.WriteEndDocument();
                writer2.Close();



                // ----------------------------------------------------------------------------//
                //  Parse the xml_configuration file
                //-----------------------------------------------------------------------------//

               // HERE I PARSE MY XML
                //-----------------------------------------------------------------------------//
                // Send the xml_configuration_file
                //----------------------------------------------------------------------------//          
                Inputdata = output.ToString();
                if (clientSocket.Connected)
                {

                    if (i == 0)
                    {

                        this.Send_Data(clientSocket, Inputdata);

                    }
                    else
                    {
                        while (contains == false)
                        {

                            string ack = this.Receive_Data_From_Transceiver(clientSocket);
                            contains = ack.Contains("ACK");


                        }

                        this.Send_Data(clientSocket, Inputdata);

                    }

                }

                i++;
            }
            return send_data;
        }
//////////////////////////////////////////////////////////////////
the code for receiving:

/////////////////////////////////////////////////////////////////////////////////////////////

public string Receive_Data_From_Transceiver(Socket Transceiver_Socket)
        {
            string Receive_Data = "";
            if (Transceiver_Socket.Connected)
            {

                int size = 0;

                try
                {
                    byte[] inStream = new byte[10025];
                    try
                    {
                        size = Transceiver_Socket.Receive(inStream);
                        //Receive_Data = System.Text.Encoding.ASCII.GetString(inStream);///////////26/06/2012
                        Receive_Data = System.Text.Encoding.ASCII.GetString(inStream);
                        Array.Clear(inStream, 0, inStream.Length - 1);
                    }
                    catch (Exception Receive_Data_Exc)
                    { MessageBox.Show(Receive_Data_Exc.ToString()); }

                }
                catch (Exception Receive_Data_Excp)
                {
                    MessageBox.Show(Receive_Data_Excp.ToString());
                }


            }
            return (Receive_Data);
        }
/////////////////////////////////////////////////////////////////////

----------

