|
Программирование >> Программирование с использованием ajax
internal static byte [] GetFileListBytes() { try { Список, возвращаемый запросом LIST. lEnumerable <string> files = PictureHelper .GetFileList () ; StringBuilder responseMessage = new StringBuilder () ; foreach (string s in files) { responseMes sage.Append(s); responseMessage.Append( : ); return Encoding. ASCII. GetBytes ( responseMessage.ToStringO); catch (DirectoryNotFoundException ex) { Console.WriteLine(ex.Message); throw; 5. Импортируйте пространства имен System.Net, System.Net. Sockets и System. 10 в файл Program, cs. 6. В метод Main () серверного приложения добавьте следующий код: class Program { static void Main () { TcpListener listener = new TcpListener (IPAddress .Any, Properties.Settings.Default.Port); listener.Start 0; Console.WriteLine( Server running... ); while (true) { const int bufferSize = 8192; TcpClient client = listener .AcceptTcpClient () ; NetworkStream clientStream = client. GetStream () ; byte[] buffer = new byte [bufferSize] ; int readBytes = 0; readBytes = clientStream.Read(buffer, 0, bufferSize); string request = Encoding. ASCI I .GetString (buffer) .S\ibstring( 0, readBytes); if (request.StartsWith( LIST , StringConparison.Ordinal)) { Список, возвращаемый запросом LIST. byte[] responseBuffer = PictureHelper .GetFileListBytes (); clientStream. Write (responseBuffer, 0, responseBuffer .Length); else if (request. StartsWith ( FILE , S tringCoi4>arison. Ordinal)) { Файл, возвращенный запросом FILE. Получение имени файла. string[] requestMessage = request.Split( : ) ; string filename = requestMessage[1]; byte[] data = File.ReadAllBytes(Path.Combine( Properties.Settings.Default.PictureDirectory, filename)); Отправка изображения клиенту. clientStream.Write(data, 0, data.Length); clientStream.Close 0; Описание полученных результатов Чтобы создать серверное приложение, которое дожидается подключения клиентов, использующих протокол TCP, можно применять класс TcpListener. Для создания объекта TcpListener нужно определить номер порта сервера. В данном случае номер порта считывается из файла конфигурации посредством объекта Properties. Settings. Default. Port. Затем прможение вызывает метод Start () для запуска прослушивания входящих запросов: TcpListener listener = new TcpListener(IPAddress.Any, Properties.Settings.Default.Port); listener.Start 0; После запуска слушателя сервер с помощью метода AcceptTcpClient () дожидается подключения клиента. Подключение к клиенту определено в объекте TcpClient, возвращенном методом AcceptTcpClient (): TcpClient client = listener.AcceptTcpClient (); После того как подключение инициировано, клиент отправляет запрос серверу. Запрос читается в поток. Метод client. GetStream () возвращает объект NetworkStream. Данные из этого сетевого потока считываются в буфер массива байтов, а затем преобразуются в строку, которая сохраняется в переменной request: NetworkStream clientStream = client.GetStream(); byte[] buffer = new byte[bufferSize]; int readBytes = 0; readBytes = clientStream.Read(buffer, 0, bufferSize); string request = Encoding.ASCII.GetString(buffer).Substring(0, readBytes); В зависимости от строки запроса клиенту возвращается либо список файлов изображений, либо байты изображения. Проверка строки запроса выполняется методом StartsWith: if (request.StartsWith( LIST , StringComparison.Ordinal)) Сервер отправляет данные обратно клиенту, записывая возвращаемые данные в сетевой поток: byte[] responseBuffer = PictureHelper.GetFileListBytes (); clientStream.Write(responseBuffer, 0, responseBuffer.Length); , . .....I Создание TCP-клиента Клиентское приложение - это приложение Windows Fornis, которое отображает файлы изображений, доступные на сервере. Когда пользователь выбирает файл изображения, изображение будет показано в клиентском приложении. 1. Создайте новый WPF-проект по имени Pictured lent в каталоге С: \BegVCSharp\ Chapter32. 2. Удалите файл Windowl. xaml и добавьте новое окно WPF по имени Pictured lent Window.xaml. В файле Арр.xaml измените ссылку на PictureClientWindow.xaml. 3. Добавьте в настройки свойств приложения номер порта сервера, как это было выполнено в серверном приложении. Свойство имени сервера называется Server, а свойство номера порта - ServerPort. Установите значение Server в соответствии с именем сервера, а номер порта - в соответствии с номером порта сервера. В этом примере используется номер порта сервера равный 8888. 4. В главное окно добавьте элементы управления, показанные на рис. 32.11. Рис. 32.11. Главное окно приложения PictureClient Основные элементы управления этого диалогового окна перечислены в табл. 32.5. Таблица 32.5. Значения свойств элементов управления
Код файла PictureClientWindow.xaml показан ниже: <Window x:Class= PictureClient.PictureClientWindow xmlns= http: schemas.microsoft.com/winfх/2006/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/2006/xaml Title= Picture Client Height= 300 Width= 500 >
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |