Файл: Разработка клиентского и серверного приложения по организации чата с применением протокола TCP на платформе WIN 32.pdf
Добавлен: 28.06.2023
Просмотров: 47
Скачиваний: 5
Введение
Вопросы общения интересовали людей всегда. Для того, чтобы можно было обмениваться информацией не только при личной встрече, но и на огромных расстояниях, люди изобретали всё новые и новые технические средства, организовывали почтовые системы, протягивали кабели через континенты и океаны, запускали спутники связи. С развитием информационных технологий стали возможным еще более глобальные коммуникации. Историческим «докомпьютерным» предшественником чатов, несомненно, был телефон. Ни почта, ни телеграф не позволяли общаться в реальном времени и не были доступны в домашней обстановке. Изобретение и распространение телефона по планете вызвало настоящую революцию в средствах и способах общения. Возможность поговорить с собеседником на другой стороне Земли казалась настоящим чудом.
Программы для обмена текстовыми строками, несмотря на простоту самой идеи, появились не сразу. Базовым для них является единый протокол - TCP. TCP -- один из основных протоколов передачи данных Интернета, предназначенный для управления передачей данных в сетях и подсетях TCP/IP. Выполняет функции протокола транспортного уровня в стеке протоколов IP. Интерфейсом прикладного программирования для сетевых приложений TCP/IP являются сокеты. Сокет - название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет - абстрактный объект, представляющий конечную точку соединения. Сокет - это комбинация IP-адреса и порта. Каждый процесс может создать слушающий сокет (серверный сокет) и привязать его к какому-нибудь порту операционной системы. Слушающий процесс обычно находится в цикле ожидания, то есть просыпается при появлении нового соединения. Для нас это означает, что сервер будет слушать какой-либо порт и после подключения клиента, будем производить с ним какие-то действия.
Основанием для разработки программы послужила идея проверить свои возможности по написанию программы работающей с сетью, такой как сетевой чат.
Чат -- средство обмена сообщениями по компьютерной сети в режиме реального времени, а также программное обеспечение, позволяющее организовывать такое общение. Характерной особенностью является коммуникация именно в реальном времени или близкая к этому, что отличает чат от форумов и других «медленных» средств. То есть, если на форуме можно написать вопрос и ждать, пока кто-нибудь посчитает нужным на него ответить (в то же время, можно получить и несколько ответов сразу от разных пользователей), то в чате общение происходит только с теми, кто присутствует в нём в настоящий момент, а результаты обмена сообщениями могут и не сохраняться.
Под словом чат обычно понимается групповое общение, хотя к ним можно отнести и обмен текстом «один на один» посредством программ мгновенного обмена сообщениями, например, XMPP, ICQ или даже SMS.
Основная цель - создания сетевого чата - мгновенный обмен сообщениями. Использование данного программного продукта поможет сократить время выполнения какой-либо работы или просто хорошо провести время, общаясь в кругу друзей.
Сетевой чат может быть использован как для малого круга людей, т.е. в домашних условиях, так и на производстве небольшого предприятия.
Перечень задач, подлежащих разработке в курсовой работе:
- Сетевой чат должен обеспечивать мгновенный обмен сообщениями, быть полезным в использовании и потреблять наименьшее количество ресурсов персонального компьютера;
- Программный продукт должен иметь дружественный интерфейс, не требующий специальной подготовки пользователей, должен способствовать более эффективному распределению и экономии времени;
Данная работа будет реализована на языке C# и С++ в среде разработки Microsoft Visual Studio 2013.
ОСНОВНАЯ ЧАСТЬ
Требования к приложению
При разработке курсовой работы были учтены требования, предъявленные к полноценному локальному чату. Эти требования оптимально нацелены на достижение максимального удовлетворения потребностей пользователя.
Программа имеет название «My_Chat», предназначена как для домашнего использования, так и для использования на малом производстве. Разработана для людей, плохо знающих ПК, программный продукт не требует никаких инструктажей по использованию и понятен на интуитивном уровне.
Для работы с приложением необходимо наличие локального соединения. Оно необходимо для целенаправленного использования программного продукта, так как при его отсутствии программный продукт становиться бесполезным.
Интерфейс программы должен способствовать снижению количества ошибок, вызванных неправильными действиями пользователей системы, а также система должна осуществлять контроль над вводимыми данными.
Надежность программы в целом зависит от надежности используемой операционной системы. Для обеспечения устойчивого состояния программного средства необходимо проверять корректность входных и выходных данных. Категорически запрещается удалять или подвергать каким-либо действия файлы программы.
Основной задачей данного проекта является обеспечивать мгновенную связь двух и нескольких людей одновременно, путем передачи небольшого количества информации непосредственно друг другу.
В качестве входных данных в программе-клиенте являются:
· «Никнейм» пользователя, под которым он будет известен в чате;
· Виртуальный адрес компьютера, на котором запущен сервер;
· Текстовая информация, вводимая самим пользователем.
Выходными данными является текстовая информация, передаваемая самими пользователями, а также их псевдонимы.
Анализ исходных данных
Любая сетевая программа имеет свой протокол передачи данных.
Протокол передачи данных - набор соглашений интерфейса логического уровня, которые определяют обмен данными между различными программами. Эти соглашения задают единообразный способ передачи сообщений и обработки ошибок при взаимодействии программного обеспечения разнесённой в пространстве аппаратуры, соединённой тем или иным интерфейсом.
Сетевой протокол -- набор правил и действий (очерёдности действий), позволяющий осуществлять соединение и обмен данными между двумя и более включёнными в сеть устройствами.
Примеры сетевых протоколов:
· TCP/IP -- набор протоколов передачи данных, получивший название от двух принадлежащих ему протоколов: TCP и IP.
· HTTP (Hyper Text Transfer Protocol) -- это протокол передачи гипертекста. Протокол HTTP используется при пересылке Web-страниц между компьютерами, подключенными к одной сети.
· FTP (File Transfer Protocol) -- это протокол передачи файлов со специального файлового сервера на компьютер пользователя. FTP дает возможность абоненту обмениваться двоичными и текстовыми файлами с любым компьютером сети. Установив связь с удаленным компьютером, пользователь может скопировать файл с удаленного компьютера на свой или скопировать файл со своего компьютера на удаленный.
· POP (Post Office Protocol) -- это стандартный протокол почтового соединения. Серверы POP обрабатывают входящую почту, а протокол POP предназначен для обработки запросов на получение почты от клиентских почтовых программ.
· SMTP (Simple Mail Transfer Protocol) -- протокол, который задает набор правил для передачи почты. Сервер SMTP возвращает либо подтверждение о приеме, либо сообщение об ошибке, либо запрашивает дополнительную информацию.
· TELNET -- это протокол удаленного доступа. TELNET дает возможность абоненту работать на любой ЭВМ находящейся с ним в одной сети, как на своей собственной, то есть запускать программы, менять режим работы и так далее. На практике возможности ограничиваются тем уровнем доступа, который задан администратором удаленной машины.
Перед реализацией программы было решено обмениваться информацией по протоколу передачи данных: TCP.
TCP имеет важное преимущество: гарантирует целостность доставки пакета до адресата.
Разработка приложения
Можно выделить основные этапы разработки программного продукта:
1. Этап проектирования интерфейса программы;
2. Этап написание программного кода;
3. Этап доработки, внесения изменений;
4. Этап формирования конечного продукта.
На первом этапе проектирования создается общий интерфейс программного продукта и создается его функциональная поддержка.
Этап задания обучающего материала включает в себя:
· Создание определенного макета программы;
· Создание интерфейса управления;
· Разработка оформления.
В результате проектирования выше изложенной части работы программный продукт должен поддерживать следующие функции:
· Ввод текстовой информации и ее изменение до отправки;
· Быстродействие и удобство пользования интерфейсом.
Этап написания программного кода:
· Выбор и анализ методов написания алгоритма выполнения программы;
· Написание основных функций;
· Внесение исправлений и настройка программы.
Описание программы сервера
локальный чат сервер программный
Программа выполняет следующие функции:
· Контролирует подключение пользователей и их количество;
· Получает сообщения от каждого пользователя;
· Передаёт сообщения от одного пользователя в общий чат.
В главной функции сервера задаются настройки сервера, принятие и отправка сообщений всем пользователям чата. Помимо этого, ведется протоколирование всего происходящего и выводится на консоль (Рис. 1).
Рис. 1
Настройки сервера:
server.ai_family = AF_INET;
server.ai_flags = AI_PASSIVE;
server.ai_socktype = SOCK_STREAM;
server.ai_protocol = IPPROTO_TCP;
getaddrinfo(NULL, "8888", &server, &result);
8888 - номер порта, с которым будет работать чат.
Создание потока, в котором происходит отправка сообщений:
CreateThread(NULL, NULL, (PTHREAD_START_ROUTINE)SendMessageToClient, (LPVOID)(ClientCount - 1), NULL, NULL);
Слушающий сокет:
Listen = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
bind(Listen, result->ai_addr, result->ai_addrlen);
Следующий метод отвечает за отправку сообщений:
void SendMessageToClient(int ID)
{ char* buffer = new char[1024];
for (;; Sleep(100))
{ memset(buffer, 0, sizeof(buffer));
if (recv(Connections[ID], buffer, 1024, NULL))
{ printf("%s", buffer);
for (int i = 0; i <= ClientCount; i++)
{ send(Connections[i], buffer, strlen(buffer), NULL);}}}
free(buffer); }
Описание программы клиента
При запуске программы клиента отображается окно, в котором необходимо заполнить два поля. Первое из них нужно для соединения с сервером и требует правильного заполнения, второе нужно для инициализации пользователя и может быть заполнено по усмотрению самого пользователя (Рис. 2).
Рис. 2
Помимо этого, в этом же окне присутствует CheckBox, который восстанавливает значение IP адреса, введенного в прошлый раз, тем самым облегчая ввод. (Рис. 3)
Рис. 3
Ниже приведена реализация данной функции:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{ try { if (checkBox1.Checked)
{
var sr = new StreamReader(@"Chat_Info/nastroyki.txt");
string buffer = sr.ReadToEnd();
sr.Close();
string[] ip = buffer.Split(':');
textBox1.Text = ip[0];
checkBox1.Enabled = false;
}}
catch (Exception ex)
{ MessageBox.Show("Ошибка: " + ex.Message);
}}
Так же в правом нижнем углу есть изображение, в виде знака вопроса, при нажатии на которое отображается инструкция для пользователя. (Рис. 4)
Рис. 4
В нижней части окна находится кнопка «Войти в чат!», при нажатии на которую закрывается данное окно и открывается новое, в котором происходит подключении к серверу по заданным ранее настройкам.
private void button1_Click(object sender, EventArgs e)
{if (textBox1.Text != " " && textBox1.Text != "" && textBox2.Text != " " && textBox2.Text != "")
{try{
DirectoryInfo data = new DirectoryInfo("Chat_Info");
data.Create();
var sw = new StreamWriter(@"Chat_Info/nastroyki.txt");
sw.WriteLine(textBox1.Text + ":" + textBox2.Text);
sw.Close();
this.Hide();
Form1 form = new Form1();
form.Show();}
catch (Exception ex)
{MessageBox.Show("Ошибка: " + ex.Message);}}
else MessageBox.Show("Заполните все поля!");}
При этом, если оба или одно из полей осталось пустым, на экран будет выведено соответствующее сообщение. (Рис. 5)
Рис. 5
Если IP адрес сервера был введён корректно, то в окне приложения зелёным цветом будет отображаться именно этот IP адрес (Рис. 6).
Рис. 6
В противном случае, будет выведена надпись об отсутствии настроек и появится кнопка, с помощью которой можно заново ввести настройки (Рис. 7).
Рис. 7
Если выведена зелёная надпись IP адреса и в листинге чата написано «Connect…», соответственно пользователь успешно подключился и может начать писать своё сообщение в нижнем поле для ввода текста. Для отправки сообщения нужно нажать кнопку «Отправить» либо нажать кнопку «Enter» на клавиатуре.
private void button1_Click_1(object sender, EventArgs e)
{
SendMessage("\n" + nik + ": " + textBox2.Text + "**8");
textBox2.Clear();
}
В Меню приложения есть кнопка «Автор», при нажатии на которую выводится информация о разработчике приложения (Рис. 8).
Рис. 8
Для выхода из чата нужно выбрать пункт из меню «Выход», после чего в листинге чата, пользователь будет проинформирован о том, что он вышел из чата (Рис. 9). При этом, если он выбрал этот пункт меню до того, как вошел в чат, то также будет выведено соответствующее сообщение. (Рис. 7)