예제 #1
0
        // Режим скачивания файла.
        public static void StartClient(ListView a)
        {
            a.Items.Clear();
            // Выделение переменных.
            byte[] bytes = new Byte[1024];
            // Строка для хранения входящих сообщений.
            string message = string.Empty;
            // Буффер дл получения ответа.
            Byte[] data = new Byte[256];
            // Сткрока для храниения ASCII-варианта ответа.
            String responseData = String.Empty;
            // Выделение потока для получения списка файлов.
            NetworkStream stream = clnt.GetStream();
            // Сообщение о типе клиента.
            Inform_of_Rec_Message mes = new Inform_of_Rec_Message("Rec");
            // Сообщение c именем файла из списка.
            Messages.Message LM = new ListMessage("Rec");

            try
            {
                // Оправка уведомления о типе клиента.
                NW.Send(mes, stream);

                // Получение списка файлов.
                while (!(LM is EndMessage))
                {
                    // Прочесть ответ сервера.
                    LM = NW.Recieve(stream);

                    // Проверить является ли ответ именем файла.
                    if (!(LM is EndMessage))
                    {
                        // Добавление файла в список.
                        a.Items.Add(LM.Get_Data());

                        // Отослать назад уведомление.
                        NW.Send(LM, stream);
                    }
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine("Unexpected exception : {0}", ex.ToString());
            }
        }
예제 #2
0
        // Протокол отправки сообщения.
        public static void Send_List(object income)
        {
            // Буффер входящих сообщений.
            Byte[] bytes = new Byte[1024];
            // Выделение потока для обмена информацией с клиентом.
            NetworkStream stream = (NetworkStream)income;
            // Сообщение полученное от клиента.
            Message M;

            foreach (var f in Files)
            {
                // Создание сообщения.
                ListMessage LM = new ListMessage(f.Key);
                // Отправка сообщения.
                NW.Send(LM, stream);
                // Уведомление об успешной отправке.
                Console.WriteLine("Main thread: Sent info of: {0}", f.Key);

                // Ожидание получения подтверждения о приеме информации.
                while (true)
                {
                    M = NW.Recieve(stream);

                    // Проверка на пустоту.
                    if (M.Get_Data() != "")
                    {
                        break;
                    }
                }
            }

            // Формирование отчета о завершении.
            M = new EndMessage("End of list");
            // Отправка отчета о передаче всего списка.
            NW.Send(M, stream);
        }
예제 #3
0
 // Раскрыть пакет.
 public Message Decrypt(byte[] b)
 {
     // Возвращаемое значение.
     Message mes;
     // Строка, полученная из полученного массива байт.
     string str = Encoding.ASCII.GetString(b);
     // Тип сообщений.
     if (str[0] != '\0')
     {
         int type = int.Parse(str[0].ToString());
         int border = str.IndexOf('\0');
         if (border==(-1))
         {
             border = str.Length;
         }
         if (type != -1)
         {
             // Строка данных.
             string assis = str.Substring(1, border - 1);
             // Определение типа сообщения.
             switch (type)
             {
                 case 0:
                     mes = new Inform_of_Down_Message(assis);
                     break;
                 case 1:
                     mes = new Inform_of_Rec_Message(assis);
                     break;
                 case 2:
                     mes = new ListMessage(assis);
                     break;
                 case 3:
                     mes = new RequestMessage(assis);
                     break;
                 case 4:
                     mes = new FilePartMessage(assis);
                     break;
                 case 5:
                     mes = new EndMessage(assis);
                     break;
                 case 6:
                     mes = new ResponseMessage(assis);
                     break;
                 case 7:
                     mes = new ErrorMessage(assis);
                     break;
                 case 8:
                     mes = new HubInformMessage(assis);
                     break;
                 default:
                     mes = new Message(assis);
                     break;
             }
         }
         else
             mes = new Message(string.Empty);
         return mes;
     }
     else
         return new Message(string.Empty);
 }
예제 #4
0
        // Отправка списка файлов.
        public static void Send_List(object income)
        {
            // Буффер входящих сообщений.
            Byte[] bytes = new Byte[1024];
            // Строка содержащая имя файла.
            string file_name;
            // Выделение потока для обмена информацией с клиентом.
            NetworkStream stream = (NetworkStream)income;
            // Определение файлов в директории.
            string[] dirs = Directory.GetFiles(Folder);
            // Сообщение полученное от клиента.
            Message M;

            // Отправка информации о каждом файле.
            for (int q = 0; q < dirs.Length; q++)
            {
                // Строка хранящая имя файла.
                file_name = (Path.GetFileName(dirs[q]));
                // Создание сообщения.
                ListMessage LM = new ListMessage(file_name);
                // Отправка сообщения.
                NW.Send(LM, stream);
                // Уведомление об успешной отправке.
                Console.WriteLine("Main thread: Sent info of: {0}", file_name);

                // Ожидание получения подтверждения о приеме информации.
                while (true)
                {
                    M = NW.Recieve(stream);

                    // Проверка на пустоту.
                    if (M.Get_Data() != "")
                    {
                        break;
                    }
                }
            }

            // Формирование отчета о завершении.
            M = new EndMessage("End of list");
            // Отправка отчета о передаче всего списка.
            NW.Send(M, stream);
        }