Описание Windows-программы 'Messenger'

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

Описание Windows-программы 'Messenger'

Содержание


Введение

. Внешнее описание

.1 Определение требований

1.2 Спецификация качества

. Проектирование

.1 Проектирование модульной структуры программы.

.2 Проектирование главной формы

.3 Проектирование модуля формы «About»

. Кодирование программы

. Тестирование и отладка программы

.1 Разработка методики тестирования и отладка

.2 Результаты тестирования

. Аттестация

Заключение

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

Приложения

Введение


В данной пояснительной записке рассматривается описание 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. Проектирование

 

.1 Проектирование модульной структуры программы


Программный модуль - это любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт. Цели модульного программирование две: борьба со сложностью и повторное использование программного кода. Модули могут выполнять некоторые специализированные функции, тем самым, скрывая часть связей внутри себя. В проектируемой программе можно выделить следующие модули:

·        модуль формы клиента “frmMsg.cs”, реализующий интерфейс пользователя;

·        модуль формы клиента “frmAbout.cs” ("О программе");

Рисунок 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. Реализация меню

 

.3 Проектирование модуля формы «About»


Модуль формы «About» содержит информацию о программе и разработчике.

Рисунок 4. Вид формы «About»

 

3. Кодирование программы

 

При кодировании программ, типа клиент - сервер следует обратить внимание на сетевой ввод/вывод, основанный на потоках , создаваемых с помощью сокетов.

Сокет - это объект, представляющий конечную точку коммуникаций двух процессов, связанных между собой через сеть. Сокеты могут работать с различными протоколами, включаю UDP и TCP/IP. Данная программа осуществляет соединение клиента и сервера по протоколу TCP/IP.

Чтобы создать сетевой сервер для потока данных , следует вначале создать объект TcpListener, который будет считывать информацию указонного порта TCP/IP.

//создаем объект для считывания информации с портаtcpListener = new TcpListener(ipA [0],8001);

//запускаем порт на прослушку.Start();

Теперь будем ждать, пока какой- нибудь клиент не запросит соединение:

Socket socketForClient = tcpListener.AcceptSocket();

Если соединение с клиентом установлено,

if (socketForClient.Connected)

то вызовем функцию объекта networkStrem.BeginRead, класса NetworkStream для приема сообщений:

networkStrem.BeginRead(, //куда помещать результат

, //смещение.Length , //размер буффера, //делегат обратного вызова); //локальный объект состояния

Текст программы клиента весьма прост. Клиент создает cокет tcpSocket для порта, прослушиваемого сервером, и объект класса NetworkStream для это сокета. Затем он выводит сообщение в поток и освобождает буфер:

System.IO.StreamWriter writer = new System.IO.StreamWriter(streamToServer);.WriteLine(message);.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

.         Д. Либерти. C#. Создание .Net приложений. Программирование на c# . «Символ-Плюс», СП 2003

3.       A.Turtschi. C# .NET Web Developers Guide

.        E.Butow,T.Ryan C#. Your visual blueprint for building .Net aplications

Приложение


SERVER


using System;System.Collections.Generic;System.Text;System.Net;System.Net.Sockets;System.Threading ;System.IO;class NetworkServer

{clientHandler

{byte[] buffer;Socket socket;NetworkStream networkStrem;AsyncCallback callbackRead;clientHandler(Socket socketForClient)

{

//инициализируем переменную класса= socketForClient;

//инициализируем буфер для хранения сообщений= new byte[256];

//создаем сетевой поток данных= new NetworkStream(socketForClient);

//установить обратный вызов для операции чтения файла= new AsyncCallback(this.onReadComplete);

}

//начать чтение строки, переданной клиентомvoid StartRead()

{

//читаем по сети.BeginRead(, //куда помещать результат

, //смещение.Length , //размер буффера, //делегат обратного вызова); //локальный объект состояния

}

//получив обратый вызов, этот метод выводит

//строку на экран и отсылает ее клиентуrecord_results(string data, string outName)

{fout = new FileStream(outName, FileMode.OpenOrCreate);sr = new StreamReader(fout);old = sr.ReadToEnd();.Close();.Close();= old + data;= new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);st = new StreamWriter(fout);.Write(data);.Close();.Close();

}void onReadComplete(IAsyncResult ar)

{temp = networkStrem.EndRead(ar);

//если получена строка(temp > 0)

{

//преобразуем строку в имя файлаs = System.Text.Encoding.ASCII.GetString(buffer, 0, temp);

//выводим на экран.WriteLine("say client: {0}", s);result ="==>"+ s;_results(result, "C:/temp/LOGS.txt");

}

{.WriteLine("Read connection dropped");.Close();.Close();= null;= null;

}

}

}void Main(string[] args)

{server = new NetworkServer();.Run();

}void Run()

{host = Dns.GetHostName();ipE = Dns.GetHostEntry(host);[] ipA = ipE.AddressList;(int i = 0; i < ipA.Length; i++)

{.WriteLine(ipA[i].ToString());

}

//запускаем порт на прослушку.Start();

//слушаем порт(; ; )

{

//по запросу клиента устанавливаем соединение

//и возвращаем новый сокет и продолжаем слушатьsocketForClient = tcpListener.AcceptSocket();

//если соединение с клиентом установлено(socketForClient.Connected)

{.WriteLine("Client connected");handler = new clientHandler(socketForClient);

//вызываем вспомогательный метод для приема сообщений.StartRead();

}

}

}

}

 

CLIENT

System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.Net;System.Net.Sockets;msg_Server

{partial class frmMsg : Form

{frmMsg()

{();

}void aboutToolStripMenuItem_Click(object sender, EventArgs e)

{about = new frmAbout();.ShowDialog(this);

}void exitToolStripMenuItem_Click(object sender, EventArgs e)

{.Close();

}NetworkStream streamToServer;void button1_Click(object sender, EventArgs e)

{

{serverName = txtIPserver.Text;tcpSocket = new TcpClient(serverName, 8001);= tcpSocket.GetStream();message;= txtMSG.Text;

//создаем объект StreamWriter и с его помощью

//отправляем строку на сервер.IO.StreamWriter writer = new System.IO.StreamWriter(streamToServer);.WriteLine(message);.Flush();.Close();

}{ txtMSG.Text = "server not found..."; }

}

}

}


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