// Режим скачивания файла. 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()); } }
// Протокол отправки сообщения. 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); }
// Раскрыть пакет. 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); }
// Отправка списка файлов. 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); }