Пример #1
0
        public frmServer()
        {
            InitializeComponent();

            //Instantiation des autres classes en leur donnant le handle du formulaire en paramètre
            server = new C_TFTP.ListenServer(this); // Instanciation du serveur
            rrQ    = new C_TFTP.RRQ(this);
            wrQ    = new C_TFTP.WRQ(this);

            // Instantiation de la méthode déléguée en y associant sa méthode cible.
            ServerStatus = new dSetText(UpdateStatus);
        }
Пример #2
0
        public void ListenThread()
        {
            // Création de la chainequi va renfermer le nom du fichier a remplir
            string fileName, mode = null;

            // Création du point local et du point distant
            EndPoint LocalPoint   = new IPEndPoint(0, 69);
            EndPoint DistantPoint = new IPEndPoint(0, 0);

            // Création du tableau de byte qui va renfermer la réception
            byte[] bTamponReception = new byte[516];
            int    indice           = 0;

            // Écoute du serveur
            try
            {
                // Instanciation du socket
                socket = new Socket(AddressFamily.InterNetwork,
                                    SocketType.Dgram, ProtocolType.Udp);
                socket.Bind(LocalPoint);

                //Boucle du thread
                while (!m_fin)
                {
                    if (socket.Available > 0)
                    {
                        socket.ReceiveFrom(bTamponReception, ref DistantPoint);

                        switch (TrameValidation(bTamponReception))
                        {
                        case 1:     // Read request
                            f.Invoke(f.ServerStatus, new object[] { "Une demande de lecture a été créée" });
                            fileName = null;
                            // Savoir le fichier a transporter
                            for (int i = 2; bTamponReception[i] != 0; i++)
                            {
                                fileName += (char)bTamponReception[i];
                            }
                            indice++;

                            // Savoir le mode de transmission du fichier
                            while (bTamponReception[indice] != 0)
                            {
                                mode += (char)bTamponReception[indice];
                                indice++;
                            }

                            // Instanciation de la classe RRQ
                            RRQ rrQ = new RRQ(f);
                            rrQ.SetFichier(fileName);
                            rrQ.SetPointDistant(DistantPoint);
                            f.Invoke(f.ServerStatus, new object[] { string.Format("Transfert du fichier {0} vers {1}", fileName, DistantPoint.ToString()) });
                            Thread threadRRQ = new Thread(new ThreadStart(rrQ.RRQThread));
                            threadRRQ.IsBackground = true;
                            threadRRQ.Start();
                            break;

                        case 2:     // Write Request
                            f.Invoke(f.ServerStatus, new object[] { "Une demande d'écriture a été créée" });
                            fileName = null;
                            // Savoir le fichier à transporter
                            for (int i = 2; bTamponReception[i] != 0; i++)
                            {
                                fileName += (char)bTamponReception[i];
                            }
                            indice++;

                            // Savoir le mode de transmission du fichier
                            while (bTamponReception[indice] != 0)
                            {
                                mode += (char)bTamponReception[indice];
                                indice++;
                            }
                            WRQ wrQ = new WRQ(f);
                            wrQ.SetFichier(fileName);
                            wrQ.SetPointDistant(DistantPoint);
                            f.Invoke(f.ServerStatus, new object[] { string.Format("Transfert du fichier {0} venant de {1}", fileName, DistantPoint.ToString()) });
                            Thread threadWRQ = new Thread(new ThreadStart(wrQ.WRQThread));
                            threadWRQ.Start();
                            threadWRQ.IsBackground = true;
                            break;

                        case 0:     // Ni RRQ, ni WRQ donc erreur
                            // Operation TFTP illégale
                            f.Invoke(f.ServerStatus, new object[] { "Une demande illégale a été rencontrée." });
                            DetectionTypeErreur(socket, DistantPoint, 4);
                            break;
                        }
                    }
                }
            }
            catch (SocketException se)
            {
                MessageBox.Show(se.Message, "Problème avec le Socket",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }