|
Программирование >> Программирование с использованием ajax
Описание полученных результатов При отправке запроса FTP-серверу необходимо создать объект FtpWebRequest. Объект FtpWebRequest создается фабричным методом WebRequest. Create (). Этот метод создает объект FtpWebRequest, HttpWebRequest либо FileWebRequest, в зависимости от строки URL-адреса, переданной методу. FtpWebRequest request = (FtpWebRequest)WebRequest.Create(textServer.Text); После того как объект FtpWebRequest создан, его нужно сконфигурировать, устанавливая его свойства. Свойство Credentials позволяет устанавливать имя пользователя и пароль, служащие для доступа к серверу. Свойство Method определяет РТР-запрос, который должен быть отправлен серверу. Протокол FTP принимает команды, которые очень похожи на команды протокола HTTP. Протокол HTTP использует такие команды, как GET, HEAD и POST. Команды протокола FTP определены в документе RFC 959 (www.ietf.org/rfc/rfc0959.txt): RETR предназначена для загрузки файлов, STOR - для выгрузки файлов, MKD - для создания каталога, а LIST - для получения файлов из каталога. При использовании каркаса .NET знание всех этих команд FTP не обязательно, поскольку класс WebRequestMethods содержит их. WebRequestMethods. Ftp. ListDirectory создает LIST-запрос, который должен быть отправлен серверу, а WebRequestMethods. Ftp. DownloadFiles используется для загрузки файла с сервера. request.Credentials = new NetworkCredential(textUsername.Text, passwordBox.Password); request.Method = WebRequestMethods.Ftp.ListDirectory; Когда запрос определен, он может быть отправлен серверу. Метод GetResponse () отправляет запрос серверу и дожидается получения ответа: response = (FtpWebResponse)request.GetResponse(); Чтобы можно было получить доступ к данным ответа, метод GetResponseStream () возвращает поток. Поток, созданный в ответ на запрос WebRequestMethods. Ftp. ListDirectory, содержит все имена файлов из запрошенного каталога сервера. Поток, созданный в ответ на запрос WebRequestMethods . Ftp. DownioadFiie, содержит содержимое запрошенного файла: stream = response.GetResponseStream(); Возвращенный поток, содержащий листинг файла каталога сервера, обрабатывается методом FillDirectoryList (). Чтение потока осуществляется с использованием StreamReader. Метод ReadToEnd() возвращает строку всех имен файлов, возвращенных сервером. Имена файлов разделяются символом новой строки, который используется для создания массива строк, содержащего все имена файлов. Этот массив строк устанавливается в качестве контекста данных окна, поэтому файлы отображаются элементом управления ListBox: private void FillDirectoryList(Stream stream) { StreamReader reader = new StreamReader(stream); string content = reader.ReadToEnd(); string[] files = content.Split(\n); this.DataContext = files; reader.Close (); Поток, полученный в результате запроса на загрузку файла, обрабатывается методом OnDownloadFile (). Метод открывает диалоговое окно SaveFileDialog, чтобы пользователь мог указать каталог для сохранения файла. Свойство FileName объекта SaveFileDialog возвращает каталог и имя файла, выбранные пользователем. Метод OpenWrite () класса File возвращает поток, указывающий возможное место хранения файла, полученного с сервера. Поток, возвращенный FTP-сервером, считывается в цикле while и записывается в поток локального файла: Диалоговые окна подробно рассматриваются в главе 17. inStream = response.GetResponseStream(); SaveFileDialog SaveFileDialog = new SaveFileDialog (); SaveFileDialog.FileName = fileName; if (SaveFileDialog.ShowDiaiog0 == true) { outStream = File.OpenWrite(SaveFileDialog.FileName); byte[] buffer = new byte[8192]; int size = 0; while ((size = inStream.Read(buffer, 0, 8192)) > 0) { outStream.Write(buffer, 0, size); Теперь вы узнали, как классы .NET можно применять совместно с общеизвестными прикладными протоколами. Если хотите создать собственный протокол приложения на основе TCP, для этого можно использовать классы TcpListener и TcpClient. Классы TcpListener и TcpClient Классы пространства имен System.Net. Sockets предлагают гораздо больше возможностей по программированию сетевой передачи. Классы этих пространств имен позволяют создавать собственный сервер и определять пользовательский протокол для передачи информации от клиента серверу и от сервера клиенту. С сервером можно использовать класс TcpListener. С помощью конструктора класса можно определять номер порта, который сервер должен прослушивать. Метод start О запускает прослушивание. Однако для осуществления обмена данными с клиентом сервер должен вызвать метод AcceptTcpClient (). Этот метод выполняет блокировку до момента подключения клиента. Возвращаемое значение этого метода-объект TcpClient, содержащий информацию о подключении клиента. Используя этот объект, сервер может принимать данные, отправляемые клиентом, и отправлять данные обратно клиенту. Сам клиент также использует класс TcpClient. Клиент может инициировать подключение к серверу с помощью метода Connect (), после чего он может отправлять и принимать данные посредством потока, связанного с объектом TcpClient. В двух последующих практических занятиях мы создадим простые приложения сервера и клиента с помощью классов TcpListener и TcpClient. Сервер отправляет клиенту список файлов изображений, а клиент может выбирать файл из этого списка для запроса конкретного файла с сервера. Это приложение позволяет клиенту выполнять два запроса: запрос LIST возвращает список файлов, а запрос PICTURE: имяфайла возвращает изображение в виде потока байтов. Пр11СШЧвС1Ювш!5Р Начнем с создания серверного приложения. 1. С помощью Visual Studio создайте новый проект консольного прможения в каталоге С: \BegVCSharp\Chapter32. Назовите приложение PictureServer. 2. Выберите свойства проекта. Откройте вкладку Settings (Настройки) и создайте файл настроек, используемых по умолчанию, щелкнув на ссылке This Project Does Not Contain A Default Settings File. Click Here To Create One. (Этот проект не содержит файла настроек, используемых по умолчанию. Щелкните на этой ссылке, чтобы его создать). 3. В файле Settings. settings добавьте свойство PictureDirectory типа string и свойство Port типа int, как показано на рис. 32.10. Установите значение PictureDirectory равным имени каталога своей системы, в котором хранятся изображения, например, с: \pictures. Установите значение свойства Port равным 8888, чтобы определить номер порта сервера. (Default) Name Type Scope Value jPictureOirectory string у Appkatton v с \picture$ jPort kit: ,y Appkatton v 8888 ДИ stnng V Applcation v Puc. 32.10. Добавление свойств в файл Settings, settings 4. С помощью пункта меню Add=>Class (Добавить=i>Класс) в окне Solution Explorer добавьте в консольное приложение внутренний вспомогательный класс PictureHelper. Статические методы, предоставляемые этим классом, возвращают список всех файлов (метод GetFileList ()) и список имен файлов в массиве байтов (метод GetFileListBytes ()). Для получения имен файлов и чтения файла этот класс использует файловый ввод-вывод. Более подробно файловый ввод-вывод рассматривается в главе 24. using System; using System.Collections.Generic; using System.Linq; using System.lO; using System.Text; namespace PictureServer { internal static class PictureHelper { internal static lEnumerable <string> GetFileList () { Удаление пути каталога иэ имени файла, return from file in Directory.GetFiles ( Properties.Settings.Default.PictureDirectory) select Path.GetFileName (file) ;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |