Программирование >>  Программирование с использованием ajax 

1 ... 335 336 337 [ 338 ] 339 340 341 ... 396


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. Значения свойств элементов управления

Тип элемента

Свойство

управления

PictureBox

pictureBox

Button

buttonListPictures

Content= List Pictures

ListBox

listFiles

ItemsSource= {Binding}

Button

buttonGetPicture

Content= Get Picture

Код файла 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 >



1 ... 335 336 337 [ 338 ] 339 340 341 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика