/// <summary>
        /// получение запрашиваемых директорий с сервера
        /// </summary>
        /// <param name="netStream"></param>
        /// <param name="directory"></param>
        /// <returns></returns>
        private DirectoryContent GetDirectoriesFromServer(NetworkStream netStream, string directory)
        {
            try
            {
                //создание запроса на получение директорий
                GetDirectoryContentTask getDirectoryContentTask = new GetDirectoryContentTask();

                //установка запросу, что нужно получить именно директории
                getDirectoryContentTask.Directory = directory;

                //отправка запроса к серверу
                netStream.Send(getDirectoryContentTask);

                //прочитать из потока
                Stream stream = netStream.WriteToStream();

                //получить запрошенную информацию о директории
                DirectoryContent directoryInfoClass =
                    Serializer.Deserialize <DirectoryContent>(((MemoryStream)stream).ToArray());

                //вернуть сведения о директории
                return(directoryInfoClass);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            return(null);
        }
        /// <summary>
        /// обсуживание сервера
        /// </summary>
        /// <param name="client">новый клиент</param>
        public void Service(TcpClient client)
        {
            try
            {
                //пока клиент подключен
                using (TcpClient newClient = client)
                {
                    while (true)
                    {
                        //получить сетевой поток клиента
                        NetworkStream networkStream = newClient.GetStream();

                        //получить запрос клиента
                        MemoryStream taskStream = (MemoryStream)networkStream.WriteToStream();

                        //если запроса не было
                        if (taskStream.Length == 0)
                        {
                            break;//прервать операцию
                        }
                        //если запрос являлся получение сведений о директории
                        if (this.IsTask <GetDirectoryContentTask>(taskStream))
                        {
                            //десерилизовать запрос
                            GetDirectoryContentTask task =
                                Serializer.Deserialize <GetDirectoryContentTask>(taskStream.ToArray());

                            //отправить директории клиенту
                            this.SendDirectoryDataToClient(task, networkStream);
                        }
                        //иначе, если запрос был на получение дисков
                        else if (this.IsTask <GetDrivesTask>(taskStream))
                        {
                            //отправить диски клиенту
                            this.SendDrivesInfo(networkStream);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// отправка полученных директорий и файлов в поток к клиенту
        /// </summary>
        /// <param name="task">запрос на получение директорий</param>
        /// <param name="networkStream">сетевой поток клиента</param>
        private void SendDirectoryDataToClient(GetDirectoryContentTask task, NetworkStream networkStream)
        {
            try
            {
                //получение коллекцию директорий по запросу
                List <DirectoryInfo> directories = this.GetDirectories(task.Directory);

                //создание нового экземпляра для сведений о директории
                DirectoryContent directoryContent = new DirectoryContent();

                //проход по каждой директории в коллекции директорий
                foreach (var dir in directories)
                {
                    //проверка, если файл имеет флаг директории и не является
                    if (dir.Attributes.HasFlag(FileAttributes.Directory) &&
                        !dir.Attributes.HasFlag(FileAttributes.Hidden) &&//скрытым
                        !dir.Attributes.HasFlag(FileAttributes.System) &&//системным
                        !dir.Attributes.HasFlag(FileAttributes.Temporary))   //временным
                    {
                        //создать Data Object Model директории
                        DirectoryMetadata directoryMetadata = new DirectoryMetadata()
                        {
                            FullPath    = dir.FullName,
                            Name        = dir.Name,
                            LastChanged = dir.LastWriteTime,
                        };

                        //добавление в лист сведений о директории
                        directoryContent.Directories.Add(directoryMetadata);
                    }
                }

                //получение коллекции файлов
                List <FileInfo> files = this.GetFiles(task.Directory);

                //прохождение по каждому файлу в коллекции файлов
                foreach (var file in files)
                {
                    //если файл не является
                    if (!file.Attributes.HasFlag(FileAttributes.Hidden) &&//скрытым
                        !file.Attributes.HasFlag(FileAttributes.System) &&//системным
                        !file.Attributes.HasFlag(FileAttributes.Temporary))   //временным
                    {
                        //создать Data Object Model файла
                        DirectoryMetadata fileMetadata = new DirectoryMetadata()
                        {
                            FullPath    = file.FullName,
                            Name        = file.Name,
                            LastChanged = file.LastWriteTime,
                        };

                        //добавление в лист сведений о файле
                        directoryContent.Files.Add(fileMetadata);
                    }
                }

                //отправка клиенту запроса файлов и директорий
                networkStream.Send(directoryContent);
            }
            catch (UnauthorizedAccessException) { }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }