Разработка клиентского и серверного приложения по организации чата с применением протокола TCP на платформе WIN 32

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    151,21 Кб
  • Опубликовано:
    2016-01-21
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка клиентского и серверного приложения по организации чата с применением протокола TCP на платформе WIN 32

Содержание

Введение

ОСНОВНАЯ ЧАСТЬ

Требования к приложению

Анализ исходных данных

Разработка приложения

Описание программы сервера

Описание программы клиента

Заключение

Список литературы

Приложение

 

Введение


Вопросы общения интересовали людей всегда. Для того, чтобы можно было обмениваться информацией не только при личной встрече, но и на огромных расстояниях, люди изобретали всё новые и новые технические средства, организовывали почтовые системы, протягивали кабели через континенты и океаны, запускали спутники связи. С развитием информационных технологий стали возможным еще более глобальные коммуникации. Историческим «докомпьютерным» предшественником чатов, несомненно, был телефон. Ни почта, ни телеграф не позволяли общаться в реальном времени и не были доступны в домашней обстановке. Изобретение и распространение телефона по планете вызвало настоящую революцию в средствах и способах общения. Возможность поговорить с собеседником на другой стороне Земли казалась настоящим чудом.

Программы для обмена текстовыми строками, несмотря на простоту самой идеи, появились не сразу. Базовым для них является единый протокол - 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) - это протокол передачи гипертекста <https://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%BF%D0%B5%D1%80%D1%82%D0%B5%D0%BA%D1%81%D1%82>. Протокол HTTP используется при пересылке Web-страниц между компьютерами, подключенными к одной сети.

·        FTP (File Transfer Protocol) - это протокол передачи файлов со специального файлового сервера на компьютер пользователя. FTP дает возможность абоненту обмениваться двоичными и текстовыми файлами с любым компьютером сети. Установив связь с удаленным компьютером, пользователь может скопировать файл с удаленного компьютера на свой или скопировать файл со своего компьютера на удаленный.

·        POP (Post Office Protocol) - это стандартный протокол почтового соединения. Серверы POP обрабатывают входящую почту, а протокол POP предназначен для обработки запросов на получение почты от клиентских почтовых программ.

·        SMTP (Simple Mail Transfer Protocol) - протокол, который задает набор правил для передачи почты. Сервер SMTP возвращает либо подтверждение о приеме, либо сообщение об ошибке, либо запрашивает дополнительную информацию.

·        TELNET - это протокол удаленного доступа. TELNET дает возможность абоненту работать на любой ЭВМ находящейся с ним в одной сети, как на своей собственной, то есть запускать программы, менять режим работы и так далее. На практике возможности ограничиваются тем уровнем доступа, который задан администратором удаленной машины.

Перед реализацией программы было решено обмениваться информацией по протоколу передачи данных: TCP.имеет важное преимущество: гарантирует целостность доставки пакета до адресата.

Разработка приложения


Можно выделить основные этапы разработки программного продукта:

1. Этап проектирования интерфейса программы;

2.      Этап написание программного кода;

.        Этап доработки, внесения изменений;

.        Этап формирования конечного продукта.

На первом этапе проектирования создается общий интерфейс программного продукта и создается его функциональная поддержка.

Этап задания обучающего материала включает в себя:

·  Создание определенного макета программы;

·        Создание интерфейса управления;

·        Разработка оформления.

В результате проектирования выше изложенной части работы программный продукт должен поддерживать следующие функции:

·  Ввод текстовой информации и ее изменение до отправки;

·        Быстродействие и удобство пользования интерфейсом.

Этап написания программного кода:

·  Выбор и анализ методов написания алгоритма выполнения программы;

·        Написание основных функций;

·        Внесение исправлений и настройка программы.

Описание программы сервера

локальный чат сервер программный

Программа выполняет следующие функции:

·        Контролирует подключение пользователей и их количество;

·        Получает сообщения от каждого пользователя;

·        Передаёт сообщения от одного пользователя в общий чат.

В главной функции сервера задаются настройки сервера, принятие и отправка сообщений всем пользователям чата. Помимо этого, ведется протоколирование всего происходящего и выводится на консоль (Рис. 1).

Рис. 1

Настройки сервера:

- номер порта, с которым будет работать чат.

Создание потока, в котором происходит отправка сообщений:

CreateThread(NULL, NULL, (PTHREAD_START_ROUTINE)SendMessageToClient, (LPVOID)(ClientCount - 1), NULL, NULL);

Слушающий сокет:

Listen = socket(result->ai_family, result->ai_socktype, result->ai_protocol);(Listen, result->ai_addr, result->ai_addrlen);

Следующий метод отвечает за отправку сообщений:

void SendMessageToClient(int ID)

{* buffer = new char[1024];(;; Sleep(100))

{(buffer, 0, sizeof(buffer));(recv(Connections[ID], buffer, 1024, NULL))

{("%s", buffer);(int i = 0; i <= ClientCount; i++)

{(Connections[i], buffer, strlen(buffer), NULL);

}

}

}(buffer);

}

Описание программы клиента


При запуске программы клиента отображается окно, в котором необходимо заполнить два поля. Первое из них нужно для соединения с сервером и требует правильного заполнения, второе нужно для инициализации пользователя и может быть заполнено по усмотрению самого пользователя (Рис. 2).

Рис. 2

Помимо этого, в этом же окне присутствует CheckBox, который восстанавливает значение IP адреса, введенного в прошлый раз, тем самым облегчая ввод. (Рис. 3)

Рис. 3

Ниже приведена реализация данной функции:

private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

{(checkBox1.Checked)

{sr = new StreamReader(@"Chat_Info/nastroyki.txt");buffer = sr.ReadToEnd();.Close();[] ip = buffer.Split(':');.Text = ip[0];.Enabled = false;

}

}(Exception ex)

{.Show("Ошибка: " + ex.Message);

}

}

Так же в правом нижнем углу есть изображение, в виде знака вопроса, при нажатии на которое отображается инструкция для пользователя. (Рис. 4)

Рис. 4

В нижней части окна находится кнопка «Войти в чат!», при нажатии на которую закрывается данное окно и открывается новое, в котором происходит подключении к серверу по заданным ранее настройкам.

private void button1_Click(object sender, EventArgs e)

{(textBox1.Text != " " && textBox1.Text != "" && textBox2.Text != " " && textBox2.Text != "")

{

{data = new DirectoryInfo("Chat_Info");.Create();sw = new StreamWriter(@"Chat_Info/nastroyki.txt");.WriteLine(textBox1.Text + ":" + textBox2.Text);.Close();.Hide();form = new Form1();.Show();

}(Exception ex)

{.Show("Ошибка: " + ex.Message);

}

}MessageBox.Show("Заполните все поля!");

}

При этом, если оба или одно из полей осталось пустым, на экран будет выведено соответствующее сообщение. (Рис. 5)

Рис. 5

Если IP адрес сервера был введён корректно, то в окне приложения зелёным цветом будет отображаться именно этот IP адрес (Рис. 6).

Рис. 6

В противном случае, будет выведена надпись об отсутствии настроек и появится кнопка, с помощью которой можно заново ввести настройки (Рис. 7).

Рис. 7

Если выведена зелёная надпись IP адреса и в листинге чата написано «Connect…», соответственно пользователь успешно подключился и может начать писать своё сообщение в нижнем поле для ввода текста. Для отправки сообщения нужно нажать кнопку «Отправить» либо нажать кнопку «Enter» на клавиатуре.

private void button1_Click_1(object sender, EventArgs e)

{("\n" + nik + ": " + textBox2.Text + "**8");

textBox2.Clear();

}

В Меню приложения есть кнопка «Автор», при нажатии на которую выводится информация о разработчике приложения (Рис. 8).

Рис. 8

Для выхода из чата нужно выбрать пункт из меню «Выход», после чего в листинге чата, пользователь будет проинформирован о том, что он вышел из чата (Рис. 9). При этом, если он выбрал этот пункт меню до того, как вошел в чат, то также будет выведено соответствующее сообщение. (Рис. 7)

Рис. 9

void выходToolStripMenuItem_Click_1(object sender, EventArgs e)

{(th != null) th.Abort();(Client != null)

{.Close();.Enabled = false;.Enabled = false;.Enabled = false;.Items.Add("Вы вышли из чата...");

}listBox1.Items.Add("Вы ещё не зашли в чат!");

}

Функция отправки сообщения серверу выглядит следующим образом:

{(message != " " && message != "")

{[] buffer = new byte[1024];= Encoding.UTF8.GetBytes(message);

Client.Send(buffer);

}

}

Функция приёма сообщений от сервера:

void RegOfMessage()

{[] buffer = new byte[1024];(int i = 0; i < buffer.Length; i++)

{ buffer[i] = 0; }(; ; )

{

{.Receive(buffer);messege = Encoding.UTF8.GetString(buffer);count = messege.IndexOf("**8");(count == -1)

{ continue; }Clean_Mes = "";(int i = 0; i < count; i++)

{ Clean_Mes += messege[i]; }(int i = 0; i < buffer.Length; i++)

{ buffer[i] = 0; }.Invoke((MethodInvoker)delegate()

{ listBox1.Items.Add(Clean_Mes); });

}

catch (Exception ex) { }

}

}

Подключение клиента реализуется следующим образом:

Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);(ip != null)

{.Connect(ip, port);= new Thread(delegate() { RegOfMessage(); });.Start();

}

 

Заключение


В результате выполнения курсового проекта были разработаны следующие приложения: сервер и клиент. Также были решены все задачи и достигнута цель. Целью данной работы было разработать сетевое приложение. Данное приложение позволяет удалённо обмениваться информацией по локальной или беспроводной сети.

Были получены навыки и умения в следующих сферах:

·        Программирование на языках C# и С++;

·        Работа с сокетами;

·        Применение протокола TCP;

·        Использование потоков.

Представленная версия приложения является законченным программным продуктом. Однако она может быть доработана, для чего понадобятся дополнительные средства, а также время, в течение которого будут исправляться все недочеты, которые пропустил или не посчитал нужным реализовывать разработчик.

Данный программный продукт может быть использован как в домашних условия, так и в условиях производства.

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

 

Список литературы


1. Брагин И. «Построение сетей» - СПб.: Питер, 2010. - 480 с.: ил.

. Карпов Б., Баранов Т. «С++: специальный справочник» - СПб.: Питер, 2001. - 480 с.: ил.

. Культин Н. «С# в задачах и примерах» - СПб.: БХВ-Петербург, 2002. - 288 с.

. Петров Б., Алексеев Т. «С#» - Москва, 2011. - 370 с.: ил.

. Шилдт Г. «Самоучитель С#» - СПб.: БХВ-Петербург. 2001. - 670с.

 

Приложение

_Server.cpp:

#pragma comment(lib,"Ws2_32.lib")

#include <WinSock2.h>

#include <iostream>

#include <WS2tcpip.h>Connect;* Connections;Listen;ClientCount = 0;SendMessageToClient(int ID)

{* buffer = new char[1024];(;; Sleep(100))

{(buffer, 0, sizeof(buffer));(recv(Connections[ID], buffer, 1024, NULL))

{("%s", buffer);(int i = 0; i <= ClientCount; i++)

{(Connections[i], buffer, strlen(buffer), NULL);

}

}

}(buffer);

}main()

{(LC_ALL, "russian");data;version = MAKEWORD(2, 2);res = WSAStartup(version, &data);(res != 0)

{0;

}addrinfo server;addrinfo * result;= (SOCKET*)calloc(64, sizeof(SOCKET));(&server, sizeof(server));.ai_family = AF_INET;.ai_flags = AI_PASSIVE;.ai_socktype = SOCK_STREAM;.ai_protocol = IPPROTO_TCP;(NULL, "8888", &server, &result);= socket(result->ai_family, result->ai_socktype, result->ai_protocol);(Listen, result->ai_addr, result->ai_addrlen);(Listen, SOMAXCONN);(result);conect[] = "Connect...**8";kol[] = "All users: ";("Server connect...\n");(kol);("%d", ClientCount);(;; Sleep(100))

{(Connect = accept(Listen, NULL, NULL))

{("\nClient connect...\n");(kol);("%d", ClientCount + 1);[ClientCount] = Connect;(Connections[ClientCount], conect, strlen(conect), NULL);++;(NULL, NULL, (PTHREAD_START_ROUTINE)SendMessageToClient, (LPVOID)(ClientCount - 1), NULL, NULL);

}

}1;

}_Client.cs:

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Net.Sockets;System.IO;System.Net;System.Threading;MyChat_Client

{partial class Form1 : Form

{private Socket Client;IPAddress ip = null;int port = 8888;string nik;Thread th;Form1()

{();.Enabled = false;.Enabled = false;.Enabled = false;

{sr = new StreamReader(@"Chat_Info/nastroyki.txt");buffer = sr.ReadToEnd();.Close();[] info = buffer.Split(':');= IPAddress.Parse(info[0]);= info[1];.ForeColor = Color.Green;.Text = " Подключение по IP сервера: " + info[0];= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);(ip != null)

{.Connect(ip, port);= new Thread(delegate() { RegOfMessage(); });.Start();.Enabled = true;.Enabled = true;.Enabled = true;.Items.Add(nik + " присоединился!");

}

}(Exception ex)

{.ForeColor = Color.Red;

label4.Text = "Настройки не найдены\nВведите заново!";

button2.Visible = true;

}

{(message != " " && message != "")

{[] buffer = new byte[1024];= Encoding.UTF8.GetBytes(message);.Send(buffer);

}

}RegOfMessage()

{[] buffer = new byte[1024];(int i = 0; i < buffer.Length; i++)

{ buffer[i] = 0; }(; ; )

{

{.Receive(buffer);messege = Encoding.UTF8.GetString(buffer);count = messege.IndexOf("**8");(count == -1)

{ continue; }Clean_Mes = "";(int i = 0; i < count; i++)

{ Clean_Mes += messege[i]; }(int i = 0; i < buffer.Length; i++)

{[i] = 0;

}.Invoke((MethodInvoker)delegate()

{.Items.Add(Clean_Mes);

});

}(Exception ex) { }

}

}void авторToolStripMenuItem_Click_1(object sender, EventArgs e)

{.Show("Булычёв Вячеслав \n ДБО - 481 \n 2015г");

}void button1_Click_1(object sender, EventArgs e)

{("\n" + nik + ": " + textBox2.Text + "**8");.Clear();

}void textBox2_KeyDown(object sender, KeyEventArgs e)

{(e.KeyCode == Keys.Enter)

{("\n" + nik + ": " + textBox2.Text + "**8");.Clear();

}

}void Form1_Load(object sender, EventArgs e)

{

}void button2_Click(object sender, EventArgs e)

{.Hide();form = new Form3();.Show();

}void выходToolStripMenuItem_Click_1(object sender, EventArgs e)

{(th != null) th.Abort();(Client != null)

{.Close();.Enabled = false;.Enabled = false;.Enabled = false;.Items.Add("Вы вышли из чата...");

}listBox1.Items.Add("Вы ещё не зашли в чат!");

}

}

}.cs:

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.IO;System.Windows.Forms;MyChat_Client

{partial class Form3 : Form

{Form3()

{();

}void button1_Click(object sender, EventArgs e)

{(textBox1.Text != " " && textBox1.Text != "" && textBox2.Text != " " && textBox2.Text != "")

{

{data = new DirectoryInfo("Chat_Info");.Create();sw = new StreamWriter(@"Chat_Info/nastroyki.txt");.WriteLine(textBox1.Text + ":" + textBox2.Text);.Close();.Hide();form = new Form1();.Show();

}(Exception ex)

{.Show("Ошибка: " + ex.Message);

}

}MessageBox.Show("Заполните все поля!");

}void pictureBox1_Click(object sender, EventArgs e)

{.Show("Для начала общения с другими пользователями Вам необходимо ввести IP сервера и свой Ник, нажать кнопку ' Войти в чат! ' или кнопку ' Enter ', после чего вы сможете обмениваться сообщениями. Для выхода из чата нужно выбрать пункт ' Выход ' в меню, либо закрыть приложение");

}void textBox2_KeyDown(object sender, KeyEventArgs e)

{(e.KeyCode == Keys.Enter)

{(textBox1.Text != " " && textBox1.Text != "" && textBox2.Text != " " && textBox2.Text != "")

{

{data = new DirectoryInfo("Chat_Info");.Create();sw = new StreamWriter(@"Chat_Info/nastroyki.txt");.WriteLine(textBox1.Text + ":" + textBox2.Text);.Close();.Hide();form = new Form1();.Show();

}(Exception ex)

{.Show("Ошибка: " + ex.Message);

}

}MessageBox.Show("Заполните все поля!");

}

}void checkBox1_CheckedChanged(object sender, EventArgs e)

{

{(checkBox1.Checked)

{sr = new StreamReader(@"Chat_Info/nastroyki.txt");buffer = sr.ReadToEnd();.Close();[] ip = buffer.Split(':');.Text = ip[0];.Enabled = false;

}

}(Exception ex)

{.Show("Ошибка: " + ex.Message);

}

}

}

}

Похожие работы на - Разработка клиентского и серверного приложения по организации чата с применением протокола TCP на платформе WIN 32

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!