Файл: ТЕХНОЛОГИЯ «КЛИЕНТ-СЕРВЕР» (Определение сервера и клиента).pdf
Добавлен: 01.04.2023
Просмотров: 239
Скачиваний: 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);
}
}
- Реакция на отправку
private void OnSend(IAsyncResult ar)
{
try
{
clientSocket.EndSend(ar);
}
catch (ObjectDisposedException)
{ }
catch (Exception ex)
{
MessageBox.Show(ex.Message, "SGSclientTCP: " + strName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
- Реакция на получение
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);
}
}
- Метод, что вызывается при загрузке формы
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 символ для отправки)
private void txtMessage_TextChanged(object sender, EventArgs e)
{
if (txtMessage.Text.Length == 0)
btnSend.Enabled = false;
else
btnSend.Enabled = true;
}
- Закрытие формы-клиента
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);
}
}
- Отправка по кнопке Enter
private void txtMessage_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnSend_Click(sender, null);
}
}
- Класс данных, с которыми сервер и клиент взаимодействуют друг с другом
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)
- Функция-метод, что преобразует структуру данных в массив байтов
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 Результат работы программы
В данной главе был разработан программный комплекс «Чат» с использованием технологии клиент-сервер.
Заключение
В данной работе была достигнута поставленная цель: рассмотрена технология «клиент-сервер» в теоретическом аспекте и на практическом примере.
Исходя из цели были решены следующие задачи:
- Определено понятие сервера и клиента;
- Рассмотрены роль сервера и клиента в архитектуре клиент-сервер;
- Определены преимущества архитектуры клиент-сервера;
- Определены компоненты архитектуры клиент-сервер
- Рассмотрена модели архитектуры клиент-сервер
- Определена сущность понятия сетевые протоколы и их виды;
- Разработано приложение «Чат» с применением технологи «клиент-сервер».
Наиболее бурно развивающимся направлением в области информационных технологий в последние годы стала разработка программного обеспечения на основе архитектуры клиент-сервер, связанного с сетью Internet.
Технология клиент-сервер развивается уже давно. За это время она прошела путь от академических исследований до промышленных, стандартизованных решений, позволяющих создавать по-настоящему большие, распределенные корпоративные системы, способные эволюционировать экономически эффективным образом. Можно предположить, что консолидация современных сетевых, реляционных и объектно-ориентированных технологий позволит выйти на еще более высокий уровень интеграции и качества информационных систем.
Библиография
- Дарков, А.В. Информационные технологии: теоретические основы: Учебное пособие / А.В. Дарков, Н.Н. Шапошников. - СПб.: Лань, 2016. - 448 c.
- Гаврилов, М.В. Информатика и информационные технологии: Учебник / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. - 383 c.
- Гаврилов, М.В. Информатика и информационные технологии: Учебник для прикладного бакалавриата / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. - 383 c.
- Гагарина, Л.Г. Информационные технологии: Учебное пособие / Л.Г. Гагарина, Я.О. Теплова, Е.Л. Румянцева и др. - М.: Форум, 2018. - 144 c.
- Гохберг, Г.С. Информационные технологии: Учебник / Г.С. Гохберг. - М.: Academia, 2018. - 416 c.
- Затонский, А.В. Информационные технологии: разраб. информ. модел.: Учебное пособие / А.В. Затонский. - М.: Риор, 2017. - 384 c.
- Зиборов, В. Visual C# 2012 на примерах / В. Зиборов. - М.: БХВ-Петербург, 2016. - 334c.
- Информационные системы и технологии / Под ред. Тельнова Ю.Ф.. - М.: Юнити, 2017. - 544 c.
- Информационные системы и технологии: Научное издание. / Под ред. Ю.Ф. Тельнова. - М.: ЮНИТИ, 2016. - 303 c.
- Рожков, И.В. Информационные системы и технологии в маркетинге / И.В. Рожков. - М.: Русайнс, 2017. - 320 c.
- Рой, Ошероув Искусство автономного тестирования с примерами на С# / Ошероув Рой. - М.: ДМК Пресс, 2016. - 258 c.
- Советов, Б.Я. Информационные технологии: теоретические основы: Учебное пособие / Б.Я. Советов, В.В. Цехановский. - СПб.: Лань, 2016. - 448 c.
- Чукарин, А.В. Бизнес-процессы и информационные технологии в управлении современной инфокоммуникационной компанией / А.В. Чукарин. - М.: Альпина Паблишер, 2016. - 512 c.
- Тюрин, И.В. Вычислительная техника и информационные технологии: Учебное пособие / И.В. Тюрин. - Рн/Д: Феникс, 2018. - 64 c.
- Щербакова, Т.Ф. Вычислительная техника и информационные технологии: учебное пособие / Т.Ф. Щербакова. - М.: Academia, 2017. - 288 c.