Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Создадим проект для клиента. Для этого зайдем в меню «Файл» и выберем пункт «Создать проект…». Выберем проект приложения «Приложение Windows Forms» на языке C#. Рекомендуется назвать проект client, а в качестве имени решения использовать lab2 (рис. 3.1).

Рисунок 3.1 Интерфейс окна создания проекта «Приложение Windows Forms»
Создание класса ChatClient
Создадим класс, который бы инкапсулировал работу с экземпляром класса TcpClient.

Рисунок 3.2 Добавление нового класса в проект клиентского приложения
Для создания класса необходимо вызвать контекстное меню нажатием правой кнопки мыши на имени проекта client в окне «Окно классов» или «Обозреватель решений», выбрать пункт меню «Добавить» и подпункт «Класс…» (рис. 3.3).
В открывшемся диалоговом окне задайте имя файла, которое соответствует имени нового класса (рис. 3.4). Рекомендуется назвать класс ChatClient. После нажатия кнопки «Добавить» новый класс должен появиться в «Окне классов». Для дальнейшей работы необходимо открыть файл ChatClient.cs двойным щелчком по названию класса в «Обозревателе решений» или «Окне классов». В рабочей области VS возникнет автоматически сгенерированный код для класса ChatClient.

Рисунок 3.3 Диалоговое окно создания класса ChatClient
Цель создания данного класса — инкапсуляция работы с объектом client. Для достижения цели нам потребуется решить три задачи: создать метод для подключения клиента к серверу, метод для передачи и приема сообщений по TCP-протоколу и метод для прекращения работы сервера.
Создание объекта client
Для создания объекта класса TcpClient можно использовать строку кода:
System.Net.Sockets.TcpClient client;
Запись упрощается, если применить директиву using к пространству имен System.Net.Sockets:
TcpClient client;
Поэтому сразу после директивы using System.Threading.Tasks; в блок директив необходимо дописать:
using System.Net.Sockets;
Это позволит вызывать методы для работы с TcpClient в более короткой форме.
Закрытое поле данных client объявляется в файле ChatClient.cs в области видимости ChatClient:
private TcpClient client;
Далее, как закрытые поля данных следует объявить следующие переменные:
private NetworkStream stream;
private byte[] dataWrite;
private byte[] dataRead;
Класс NetworkStream позволяет производить одновременно и передачу, и прием данных. Байтовые массивы dataWrite и dataRead соответственно используются при передаче и приеме данных с помощью асинхронных методов.
VS автоматически проверяет корректность вашего кода. Для получения подробной информации об ошибках наведите курсор на подчёркнутый текст.
Метод Join()
Для подключения к серверу может быть использован следующий открытый метод:
public void Join()
{
client = new TcpClient("127.0.0.1", 48654);
stream = client.GetStream();
dataWrite = new byte[client.SendBufferSize];
dataRead = new byte[client.ReceiveBufferSize];
stream.BeginRead(dataRead, 0, client.ReceiveBufferSize, new AsyncCallback(BeginReadCallback), null);
}
С помощью конструктора класса TcpClient создается объект client. Сразу же после создания объект client пытается установить соединение по указанному IP-адресу, например, "127.0.0.1", и порту, например, 48654. Для установления соединения необходимо знать IP-адрес и порт сервера. В случае неудачи приложение завершит работу с ошибкой. Метод GetStream() класса TcpClient позволяет получить доступ к объекту класса NetworkStream через переменную stream. На основании открытых полей данных SendBufferSize и ReceiveBufferSize класса TcpClient создаются байтовые массивы dataRead и dataWrite для приема и передачи информации. Асинхронный метод чтения данных BeginRead() позволяет записать данные в байтовый массив dataRead в отдельном потоке выполнения с помощью метода BeginReadCallback().
Метод BeginReadCallback()
Для обработки полученных сообщений заведем открытое поле данных в классе ChatClient. Для этого запишем области видимости этого класса:
public string recvMessage;
Строковая переменная recvMessage — это последнее принятое сообщение.
Закрытый метод BeginReadCallback() отвечает за обработку принятого сообщения:
private void BeginReadCallback(IAsyncResult ar)
{
int bytesRead = stream.EndRead(ar);
recvMessage = Encoding.UTF8.GetString(dataRead, 0, bytesRead);
stream.BeginRead(dataRead, 0, client.ReceiveBufferSize, new AsyncCallback(BeginReadCallback), null);
}
С помощью метода EndRead() класса NetworkStream в байтовый массив dataRead записывается принятое сообщение. Оно преобразуется в строку lastMessage с помощью метода Encoding.UTF8.GetString(). После обработки сообщения клиент снова запускает метод асинхронного приема данных BeginReadCallback().
|
|
|
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!