Файл: ТЕХНОЛОГИЯ «КЛИЕНТ-СЕРВЕР» (Определение сервера и клиента).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 238

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

//Fill the info for the message to be send

Data msgToSend = new Data();

msgToSend.strName = strName;

msgToSend.strMessage = txtMessage.Text;

msgToSend.cmdCommand = Command.Message;

byte [] byteData = msgToSend.ToByte();

//Send it to the server

clientSocket.BeginSend (byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnSend), null);

txtMessage.Text = null;

}

catch (Exception)

{

MessageBox.Show("Unable to send message to the server.", "SGSclientTCP: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

  1. Реакция на отправку

private void OnSend(IAsyncResult ar)

{

try

{

clientSocket.EndSend(ar);

}

catch (ObjectDisposedException)

{ }

catch (Exception ex)

{

MessageBox.Show(ex.Message, "SGSclientTCP: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

  1. Реакция на получение

private void OnReceive(IAsyncResult ar)

{

try

{

clientSocket.EndReceive(ar);

Data msgReceived = new Data(byteData);

//Accordingly process the message received

switch (msgReceived.cmdCommand)

{

case Command.Login:

lstChatters.Items.Add(msgReceived.strName);

break;

case Command.Logout:

lstChatters.Items.Remove(msgReceived.strName);

break;

case Command.Message:

break;

case Command.List:

lstChatters.Items.AddRange(msgReceived.strMessage.Split('*'));

lstChatters.Items.RemoveAt(lstChatters.Items.Count - 1);

txtChatBox.Text += "<<<" + strName + " has joined the room>>>\r\n";

break;

}

if (msgReceived.strMessage != null && msgReceived.cmdCommand != Command.List)

txtChatBox.Text += msgReceived.strMessage + "\r\n";

byteData = new byte[1024];

clientSocket.BeginReceive(byteData,

0,

byteData.Length,

SocketFlags.None,

new AsyncCallback(OnReceive),

null);

}

catch (ObjectDisposedException)

{ }

catch (Exception ex)

{

MessageBox.Show(ex.Message, "SGSclientTCP: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

  1. Метод, что вызывается при загрузке формы

private void Form1_Load(object sender, EventArgs e)

{

this.Text = "SGSclientTCP: " + strName;

//The user has logged into the system so we now request the server to send

//the names of all users who are in the chat room

Data msgToSend = new Data ();

msgToSend.cmdCommand = Command.List;

msgToSend.strName = strName;

msgToSend.strMessage = null;

byteData = msgToSend.ToByte();

clientSocket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnSend), null);

byteData = new byte[1024];

//Start listening to the data asynchronously

clientSocket.BeginReceive(byteData,

0,

byteData.Length,

SocketFlags.None,

new AsyncCallback(OnReceive),

null);

}

  1. Активация кнопки отправки при изменении текста (набран хоть бы 1 символ для отправки)

private void txtMessage_TextChanged(object sender, EventArgs e)

{

if (txtMessage.Text.Length == 0)

btnSend.Enabled = false;

else

btnSend.Enabled = true;

}

  1. Закрытие формы-клиента

private void SGSClient_FormClosing(object sender, FormClosingEventArgs e)

{

if (MessageBox.Show("Are you sure you want to leave the chat room?", "SGSclient: " + strName,

MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.No)

{

e.Cancel = true;

return;

}

try

{

//Send a message to logout of the server

Data msgToSend = new Data ();

msgToSend.cmdCommand = Command.Logout;

msgToSend.strName = strName;

msgToSend.strMessage = null;

byte[] b = msgToSend.ToByte ();

clientSocket.Send(b, 0, b.Length, SocketFlags.None);

clientSocket.Close();

}

catch (ObjectDisposedException)


{ }

catch (Exception ex)

{

MessageBox.Show(ex.Message, "SGSclientTCP: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

  1. Отправка по кнопке Enter

private void txtMessage_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyCode == Keys.Enter)

{

btnSend_Click(sender, null);

}

}

  1. Класс данных, с которыми сервер и клиент взаимодействуют друг с другом

class Data

public string strName; //Name by which the client logs into the room

public string strMessage; //Message text

public Command cmdCommand; //Command type (login, logout, send message, etcetera)

  1. Функция-метод, что преобразует структуру данных в массив байтов

public byte[] ToByte()

{

var result = new List<byte>();

//First four are for the Command

result.AddRange(BitConverter.GetBytes((int)cmdCommand));

byte[] bytesText = Encoding.UTF8.GetBytes(strMessage ?? "");

byte[] bytesName = Encoding.UTF8.GetBytes(strName ?? "");

//Add the length of the name

result.AddRange(BitConverter.GetBytes(bytesName.Length));

result.AddRange(BitConverter.GetBytes(bytesText.Length));

//Add the name

result.AddRange(bytesName);

//And, lastly we add the message text to our array of bytes

result.AddRange(bytesText);

return result.ToArray();

}

Результаты работы программы

На рис. 5 - 8 представлен процесс работы программы.

Сначала запускаем серверную часть приложения (рис. 5)

Рис. 5 Серверная часть приложения

Следующей запускаем клиентскую часть, вводим логин и IP адрес (рис. 6).

Рис. 6 Клиентская часть приложения

Результат работы программы с одним пользователем представлен на рис. 7.

Рис. 7 Результат работы программы с одним пользователем

Результат работы программы с двумя пользователями представлен на рис. 8.

Рис. 8 Результат работы программы

В данной главе был разработан программный комплекс «Чат» с использованием технологии клиент-сервер.

Заключение

В данной работе была достигнута поставленная цель: рассмотрена технология «клиент-сервер» в теоретическом аспекте и на практическом примере.

Исходя из цели были решены следующие задачи:

  1. Определено понятие сервера и клиента;
  2. Рассмотрены роль сервера и клиента в архитектуре клиент-сервер;
  3. Определены преимущества архитектуры клиент-сервера;
  4. Определены компоненты архитектуры клиент-сервер
  5. Рассмотрена модели архитектуры клиент-сервер
  6. Определена сущность понятия сетевые протоколы и их виды;
  7. Разработано приложение «Чат» с применением технологи «клиент-сервер».

Наиболее бурно развивающимся направлением в области информационных технологий в последние годы стала разработка программного обеспечения на основе архитектуры клиент-сервер, связанного с сетью Internet.

Технология клиент-сервер развивается уже давно. За это время она прошела путь от академических исследований до промышленных, стандартизованных решений, позволяющих создавать по-настоящему большие, распределенные корпоративные системы, способные эволюционировать экономически эффективным образом. Можно предположить, что консолидация современных сетевых, реляционных и объектно-ориентированных технологий позволит выйти на еще более высокий уровень интеграции и качества информационных систем.

Библиография

  1. Дарков, А.В. Информационные технологии: теоретические основы: Учебное пособие / А.В. Дарков, Н.Н. Шапошников. - СПб.: Лань, 2016. - 448 c.
  2. Гаврилов, М.В. Информатика и информационные технологии: Учебник / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. - 383 c.
  3. Гаврилов, М.В. Информатика и информационные технологии: Учебник для прикладного бакалавриата / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. - 383 c.
  4. Гагарина, Л.Г. Информационные технологии: Учебное пособие / Л.Г. Гагарина, Я.О. Теплова, Е.Л. Румянцева и др. - М.: Форум, 2018. - 144 c.
  5. Гохберг, Г.С. Информационные технологии: Учебник / Г.С. Гохберг. - М.: Academia, 2018. - 416 c.
  6. Затонский, А.В. Информационные технологии: разраб. информ. модел.: Учебное пособие / А.В. Затонский. - М.: Риор, 2017. - 384 c.
  7. Зиборов, В. Visual C# 2012 на примерах / В. Зиборов. - М.: БХВ-Петербург, 2016. - 334c.
  8. Информационные системы и технологии / Под ред. Тельнова Ю.Ф.. - М.: Юнити, 2017. - 544 c.
  9. Информационные системы и технологии: Научное издание. / Под ред. Ю.Ф. Тельнова. - М.: ЮНИТИ, 2016. - 303 c.
  10. Рожков, И.В. Информационные системы и технологии в маркетинге / И.В. Рожков. - М.: Русайнс, 2017. - 320 c.
  11. Рой, Ошероув Искусство автономного тестирования с примерами на С# / Ошероув Рой. - М.: ДМК Пресс, 2016. - 258 c.
  12. Советов, Б.Я. Информационные технологии: теоретические основы: Учебное пособие / Б.Я. Советов, В.В. Цехановский. - СПб.: Лань, 2016. - 448 c.
  13. Чукарин, А.В. Бизнес-процессы и информационные технологии в управлении современной инфокоммуникационной компанией / А.В. Чукарин. - М.: Альпина Паблишер, 2016. - 512 c.
  14. Тюрин, И.В. Вычислительная техника и информационные технологии: Учебное пособие / И.В. Тюрин. - Рн/Д: Феникс, 2018. - 64 c.
  15. Щербакова, Т.Ф. Вычислительная техника и информационные технологии: учебное пособие / Т.Ф. Щербакова. - М.: Academia, 2017. - 288 c.