Создание проекта TCP-клиента в VS — КиберПедия 

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Создание проекта TCP-клиента в VS

2019-11-19 182
Создание проекта TCP-клиента в VS 0.00 из 5.00 0 оценок
Заказать работу

Создадим проект для клиента. Для этого зайдем в меню «Файл» и выберем пункт «Создать проект…». Выберем проект приложения «Приложение 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().


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.