Описание Windows-программы "Messenger"
Проектирование модульной структуры программы сетевого мессенджера, назначение модуля "frmMsg". Разработка главной формы и интерфейса пользователя программы. Проектирование модуля формы "About". Разработка методики тестирования и отладка программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 19.01.2012 |
Размер файла | 606,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 1. Внешнее описание
- 1.1 Определение требований
- 1.2 Спецификация качества
- 2. Проектирование
- 2.1 Проектирование модульной структуры программы.
- 2.2 Проектирование главной формы
- 2.3 Проектирование модуля формы «About»
- 3. Кодирование программы
- 4. Тестирование и отладка программы
- 4.1 Разработка методики тестирования и отладка
- 4.2 Результаты тестирования
- 5. Аттестация
- Заключение
- Список литературы
- Приложения
Введение
В данной пояснительной записке рассматривается описание Windows-программы «Messenger».
Условия задачи: Есть две программы: клиент и сервер. Они должны взаимодействовать между собой. Клиент должен отправлять сообщения серверу, а сервер, должен принимать эти сообщения и сохранять их на диске.
Для выполнения поставленной задачи необходимо разобраться с сетевым вводом/выводом.
В данной программе будет реализована отправка сообщения по протоколу TCP/IP.
В качестве основного инструмента разработки применяется Microsoft Visual Studio.NET. Язык программирования C#.
1. Внешнее описание
1.1 Определение требований
ПС представляет собой автономную программу для операционной системы Windows и не требует процесса установки. Интерфейс клиента реализован в виде графического окна. Сервер реализован, как консольное приложение.
Клиент имеет поля TextBox для ввода сообщений и IP адреса сервера. После нажатия кнопки Button, сообщение передается серверу. Сервер принимает сообщения и сохраняет их на диске.
Если сервер не доступен или введен неправильно его IP адрес, клиент получает сообщение об ошибке.
1.2 Спецификация качества
ПС должно соответствовать основным критериям качества:
· функциональность: программа является demo - версией, пользование возможно только при наличии ОС Win32. Возможна доработка программы, в использовании Udp - протокола для широковещательных сообщений, разработке windows приложения сервера, организации списка пользователей и таймера для его автоматического обновления, а так же разработке административных функций серверу;
· надежность ПС это его способность безотказно выполнять определенные функции при заданных условиях в течение заданного периода времени с достаточно большой вероятностью. При этом под отказом в ПС понимают проявление в нем ошибки. В процессе тестирования были проверены все возможные ситуации взаимодействия сервера и клиента. Все возникшие недочеты были устранены;
· эффективность: программа предъявляет минимальные требования к аппаратному обеспечению, захват памяти и процессорного времени минимален, требования к аппаратным ресурсам намного ниже, чем для самой ОС Win32;
· сопровождаемость:
o изучаемость: программа интуитивно понятна своим интерфейсом, позволяющим правильно оценить назначение программы. Некоторые объекты сопровождены надписями, например Send - отправить сообщение, IPadressServera - поле для ввода IP адреса сервера и другие;
o модифицируемость: клиент и сервер являются легко модифицируемы, вследствие простой структуры программы;
o структурированность: клиент разделен на два модуля: функциональная часть, предназначенная для отправки сообщений и информационная часть, содержащая информацию о программе и разработчике. Сервер представляет собой консольное приложение.
· мобильность: обеспечивается прямым переносом исполняемых файлов в любую папку ОС Win. Установка не требуется. Клиент и сервер работают под любым клоном Win32.
2. Проектирование
2.1 Проектирование модульной структуры программы
Программный модуль - это любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт. Цели модульного программирование две: борьба со сложностью и повторное использование программного кода. Модули могут выполнять некоторые специализированные функции, тем самым, скрывая часть связей внутри себя. В проектируемой программе можно выделить следующие модули:
· модуль формы клиента “frmMsg.cs”, реализующий интерфейс пользователя;
· модуль формы клиента “frmAbout.cs” ("О программе");
Размещено на http://www.allbest.ru/
Рисунок 1. Структура программы
Назначение модуля «frmMsg»:
· описание элементов интерфейса, таких как TextBox - для ввода текста, MenuStrip, Button - для управляющих действий и т.п.
· установка соединения с сервером по средством протокола Tcp/IP и отправка ему сообщений
· передача управления другому модулю, в частности, модулю About
· запуск и завершение приложения
Назначение модуля «frmAbout»:
· данные о программе и разработчике
2.2 Проектирование главной формы
Главная форма реализует интерфейс пользователя. Интерфейс пользователя должен быть интуитивно понятным.
Большее пространство формы занимает TextBox(TxtMsg) - это текстовое поле для ввода сообщений. Еще один TextBox(txtIPserver) предназначен для ввода IP адреса сервера. Для наглядности его сопровождает Label - пояснительная надпись - «IPadressServera».
На форме реализовано Меню- MenuStrip. Оно состоит из двух главных и одного вложенного элемента (File - Exit и About). «Exit» - предназначен для выхода из программы, «About» - для вызова информации о программе и разработчике.
Также на форме имеется кнопка Button(cmdSend), предназначенная для отправки сообщений.
Рисунок 2. Вид главной формы
Рисунок 3. Реализация меню
2.3 Проектирование модуля формы «About»
Модуль формы «About» содержит информацию о программе и разработчике.
Рисунок 4. Вид формы «About»
3. Кодирование программы
При кодировании программ, типа клиент - сервер следует обратить внимание на сетевой ввод/вывод, основанный на потоках , создаваемых с помощью сокетов.
Сокет - это объект, представляющий конечную точку коммуникаций двух процессов, связанных между собой через сеть. Сокеты могут работать с различными протоколами, включаю UDP и TCP/IP. Данная программа осуществляет соединение клиента и сервера по протоколу TCP/IP.
Чтобы создать сетевой сервер для потока данных , следует вначале создать объект TcpListener, который будет считывать информацию указонного порта TCP/IP.
//создаем объект для считывания информации с порта
TcpListener tcpListener = new TcpListener(ipA [0],8001);
//запускаем порт на прослушку
tcpListener.Start();
Теперь будем ждать, пока какой- нибудь клиент не запросит соединение:
Socket socketForClient = tcpListener.AcceptSocket();
Если соединение с клиентом установлено,
if (socketForClient.Connected)
то вызовем функцию объекта networkStrem.BeginRead, класса NetworkStream для приема сообщений:
networkStrem.BeginRead(
buffer , //куда помещать результат
0, //смещение
buffer .Length , //размер буффера
callbackRead , //делегат обратного вызова
null); //локальный объект состояния
Текст программы клиента весьма прост. Клиент создает cокет tcpSocket для порта, прослушиваемого сервером, и объект класса NetworkStream для это сокета. Затем он выводит сообщение в поток и освобождает буфер:
System.IO.StreamWriter writer = new System.IO.StreamWriter(streamToServer);
writer.WriteLine(message);
writer.Flush();
Наиболее подробно вся логика по созданию соединения сервера с клиентом отражена на рисунке 5.
Рисунок 5. Блок схема
4. Тестирование и отладка программы
4.1 Разработка методики тестирования и отладка
Продемонстрируем наглядно работу данной программы, оценим правильность выполнения при подключении клиента к серверу, доставки сообщений до сервера и запись их на диске.
Подключение клиента к серверу.
1. Подключение клиента к серверу произойдет только после ввода IP адреса сервера и нажатия кнопки Send.
2. Если IP адрес не задан или задан не верно, то в поле txtMsg появиться сообщение «Server not found…».
3. Также сообщение «Server not found…» появиться при попытке приконнектиться к незапущенному серверу.
Рисунок 6. Server not found
Доставка сообщений до сервера и запись их на диск.
Доставка сообщений до сервера осуществляется по протоколу TCP/IP, что гарантирует надежность доставки. На диск этих сообщения записываются в текстовый файл - logs.txt
Рисунок 7. Доставка сообщений до сервера
Рисунок 8. Запись сообщений в текстовый файл
4.2 Результаты тестирования
На всем протяжении создания программы проводились тесты и их результаты тщательно анализировались. В результате было выявлено некорректное поведение программы в двух случаях:
· При отправке текста, размер которого превышает размер буфера сервера, а именно 256 byte, сервер выводит на экран часть текста, а клиент, отправивший сообщение подвисает.
· Если после отключения клиента, адрес сервера не изменился, то вновь запущенный клиент будет коннектиться к серверу без ввода его IP адреса в поле txtIPserver.
messenger сетевой программа
5. Аттестация
По рассмотренным выше методикам программа тестировалась много раз в течение всего процесса изготовления программного продукта. Некорректное поведение программы должно быть исправлено и доработано, но несмотря на это проведенное тестирование показало, что демо-версия программного продукта отвечает всем заявленным требованиям:
· Клиент отправляет сообщения серверу
· Сервер принимает сообщения клиента
· Сервер сохраняет принятые сообщения на диск
Заключение
В рамках курсовой работы был разработан сетевой «messenger». И хотя, вероятность использования данной демо-версии по назначению очень мала, программу можно использовать, как учебный проект, демонстрирующий программирование сетевого ввода/вывода на примере протокола TCP/IP.
В дальнейшем хотелось бы разработать дополнительные возможности мессенджера:
· Отправку сообщений с сервера
· Отправку сообщений между пользователями и «всем пользователям»
· Windows приложение сервера
· Регистрацию пользователей
· Просмотр списка пользователей по именам
· Автоматическое обновление списка пользователей
· Административные функции мессенджера
· Улучшить интерфейс клиента
· Автоответчик и меню «Информация о пользователе»
Разработав перечисленные выше методы и реализовав их в программе, «messenger» может претендовать на широкое использование в локальных сетях.
Список литературы
1. Э. Троелсен. С# и платформа .NET. Библиотека программиста. М. 2004
2. Д. Либерти. C#. Создание .Net приложений. Программирование на c# . «Символ-Плюс», СП 2003
3. A.Turtschi. C# .NET Web Developers Guide
4. E.Butow,T.Ryan C#. Your visual blueprint for building .Net aplications
Приложение
SERVER
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading ;
using System.IO;
public class NetworkServer
{
class clientHandler
{
private byte[] buffer;
private Socket socket;
private NetworkStream networkStrem;
private AsyncCallback callbackRead;
public clientHandler(Socket socketForClient)
{
//инициализируем переменную класса
socket = socketForClient;
//инициализируем буфер для хранения сообщений
buffer = new byte[256];
//создаем сетевой поток данных
networkStrem = new NetworkStream(socketForClient);
//установить обратный вызов для операции чтения файла
callbackRead = new AsyncCallback(this.onReadComplete);
}
//начать чтение строки, переданной клиентом
public void StartRead()
{
//читаем по сети
networkStrem.BeginRead(
buffer , //куда помещать результат
0, //смещение
buffer .Length , //размер буффера
callbackRead , //делегат обратного вызова
null); //локальный объект состояния
}
//получив обратый вызов, этот метод выводит
//строку на экран и отсылает ее клиенту
void record_results(string data, string outName)
{
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate);
StreamReader sr = new StreamReader(fout);
string old = sr.ReadToEnd();
sr.Close();
fout.Close();
data = old + data;
fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter st = new StreamWriter(fout);
st.Write(data);
st.Close();
fout.Close();
}
private void onReadComplete(IAsyncResult ar)
{
int temp = networkStrem.EndRead(ar);
//если получена строка
if (temp > 0)
{
//преобразуем строку в имя файла
string s = System.Text.Encoding.ASCII.GetString(buffer, 0, temp);
//выводим на экран
Console.WriteLine("say client: {0}", s);
string result ="==>"+ s;
record_results(result, "C:/temp/LOGS.txt");
}
else
{
Console.WriteLine("Read connection dropped");
networkStrem.Close();
socket.Close();
networkStrem = null;
socket = null;
}
}
}
static void Main(string[] args)
{
NetworkServer server = new NetworkServer();
server.Run();
}
private void Run()
{
string host = Dns.GetHostName();
IPHostEntry ipE = Dns.GetHostEntry(host);
IPAddress[] ipA = ipE.AddressList;
for (int i = 0; i < ipA.Length; i++)
{
Console.WriteLine(ipA[i].ToString());
}
//создаем объект для считывания информации с порта
TcpListener tcpListener = new TcpListener(ipA [0],8001);
//запускаем порт на прослушку
tcpListener.Start();
//слушаем порт
for (; ; )
{
//по запросу клиента устанавливаем соединение
//и возвращаем новый сокет и продолжаем слушать
Socket socketForClient = tcpListener.AcceptSocket();
//если соединение с клиентом установлено
if (socketForClient.Connected)
{
Console.WriteLine("Client connected");
clientHandler handler = new clientHandler(socketForClient);
//вызываем вспомогательный метод для приема сообщений
handler.StartRead();
}
}
}
}
CLIENT
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace msg_Server
{
public partial class frmMsg : Form
{
public frmMsg()
{
InitializeComponent();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
frmAbout about = new frmAbout();
about.ShowDialog(this);
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private NetworkStream streamToServer;
private void button1_Click(object sender, EventArgs e)
{
try
{
string serverName = txtIPserver.Text;
TcpClient tcpSocket = new TcpClient(serverName, 8001);
streamToServer = tcpSocket.GetStream();
string message;
message = txtMSG.Text;
//создаем объект StreamWriter и с его помощью
//отправляем строку на сервер
System.IO.StreamWriter writer = new System.IO.StreamWriter(streamToServer);
writer.WriteLine(message);
writer.Flush();
streamToServer.Close();
}
catch { txtMSG.Text = "server not found..."; }
}
}
}
Размещено на Allbest.ru
Подобные документы
Разработка интерфейса пользователя, модуля программы, печатной формы, а также ролей и пользователей. Описание контрольного примера и порядок проведения тестирования информационной системы, требования к ней, а также ее функциональные особенности.
курсовая работа [1,4 M], добавлен 22.03.2017Проектирование модуля программы 1С: "Поступление и выбытие удобрений", позволяющего вносить данные о клиентах, складах, контролировать поставки удобрений. Анализ предметной области и построение функциональной модели программы, ее отладка и тестирование.
курсовая работа [1,6 M], добавлен 24.02.2015Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.
курсовая работа [215,3 K], добавлен 01.09.2010Основные стадии разработки, принципы тестирования и отладка программного модуля "VFS". Особенности проектирования на языке UML. Методы "грубой силы" и их применение при отладке программы. Вредные факторы, присутствующие на рабочем месте программиста.
дипломная работа [827,0 K], добавлен 07.03.2012Основные операции с матрицами. Проектирование объектно-ориентированного модуля для работы с матрицами в среде Delphi 7. Разработка программы, которая позволяет выполнять различные действия над матрицами. Описание интерфейса программы, исходный код модуля.
курсовая работа [1014,2 K], добавлен 15.01.2013Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.
курсовая работа [506,5 K], добавлен 21.02.2011Описание логической и модульной структуры разрабатываемой программы, используемые в данном процессе основные технические средства. Организация хранения данных в программе, проектирование интерфейса. Тестирование и отладка, листинг готовой программы.
курсовая работа [494,5 K], добавлен 20.06.2012Структурная диаграмма программного модуля. Нахождение суммы элементов, находящихся над главной диагональю. Реализация программного модуля: код программы; описание использованных операторов и функций. Особенности тестирования программного модуля.
курсовая работа [146,6 K], добавлен 01.09.2010Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.
курсовая работа [1,4 M], добавлен 07.08.2013Структурная схема получения гороскопа по дате рождения. Листинг исходных кодов программы и руководство пользователя. Ввод данных с помощью объекта класса QDateEdit. Разработка пользовательского интерфейса. Выбор стратегии тестирования и отладка программы.
курсовая работа [1,0 M], добавлен 31.05.2015