Пример #1
0
        // Режим отправки файла.
        public static void StartUploadClient(ListView a)
        {
            a.Items.Clear();
            // Выделение переменных.
            byte[] bytes = new Byte[1024];
            // Выделение потока для получения списка файлов.
            NetworkStream stream = clnt.GetStream();
            // Сообщение о типе клиента.
            Inform_of_Down_Message mes = new Inform_of_Down_Message("Down");

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

            // Представление файлов клиента в виде списка.
            a.Items.Clear();
            string[] dirs = Directory.GetFiles(Folder);
            foreach (string dir in dirs)
            {
                ListViewItem item1 = new ListViewItem(Path.GetFileName(dir), 0);
                a.Items.AddRange(new ListViewItem[] { item1 });
            }
        }
Пример #2
0
        // Протокол отправки файла.
        public void Sending()
        {
            // Сообщение для коммуникации с клиентом.
            Message file_part = new FilePartMessage(string.Empty);
            // Сообщение для обработки подтверждения.
            Message response = new ResponseMessage("resp");
            // Уведомление о типе трансляции хаба.
            Inform_of_Down_Message down = new Inform_of_Down_Message(Path.GetFileName(flname));
            // Поток общения с хабом.
            NetworkStream Cur_Hub;
            Files.TryGetValue(flname, out Cur_Hub);

            NW.Send(down, Cur_Hub);

            using (NetworkStream stream = new NetworkStream(client))
            {
                NW.Send(response, Cur_Hub);
                do
                {
                    mes = NW.Recieve(Cur_Hub);
                    if (mes != null)
                    {
                        if (!(mes is EndMessage))
                        {
                            // Отправка сообщения клиенту.
                            NW.Send(mes, stream);

                            // Ожидание ответа.
                            do
                            {
                                response = NW.Recieve(stream);
                            }
                            while (response.Get_Data() == string.Empty);

                            // Отправка уведомления хабу.
                            NW.Send(response, Cur_Hub);
                        }
                        else
                        {
                            mes = new EndMessage("End of file.");
                            NW.Send(mes, stream);
                        }
                    }
                } while (!(mes is EndMessage));

                // Уведомление об окончании операции.
                Console.WriteLine("Downloading is complete!");
            }
        }
Пример #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);
 }