48657 (Разработка программы приема и передачи сообщений в локальной сети Microsoft), страница 3

2016-07-29СтудИзба

Описание файла

Документ из архива "Разработка программы приема и передачи сообщений в локальной сети Microsoft", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48657"

Текст 3 страницы из документа "48657"

BufferSize:= 0;

Q:= $FFFFFFFF;

if WNetEnumResourceA (R, Q, Buf, BufferSize) <> NO_ERROR then

begin

Q:=1;

New(Buf);

while WNetEnumResourceA (R, Q, Buf, BufferSize) = NO_ERROR do

begin

begin

P:= Buf;

NR:= P;

ListBox1. Items. Add (NR^.lpProvider);

L. Add(Buf);

end;

Q:= $FFFFFFFF;

New(Buf);

end;

Dispose(Buf);

end;

WNetCloseEnum(R);

end;

end;

procedure TForm4. FormCreate (Sender: TObject);

begin

ListBox1. Clear;

L:= TList. Create;

end;

procedure TForm4. FormClose (Sender: TObject; var Action: TCloseAction);

var I: Integer;

begin

for I:= 0 to L. Count – 1 do

begin

Dispose (L. Items[I]);

end;

L. Free;

end;

procedure TForm4. Button2Click (Sender: TObject);

var

s:string;

begin

if ListBox1. ItemIndex<>-1 then

begin

s:=ListBox1. Items [ListBox1. ItemIndex];

if s[1]='\' then Delete (s, 1, 2);

Form2. Edit1. Text:=s;

ModalResult:=mrOK;

end;

end;

procedure TForm4. ListBox1DblClick (Sender: TObject);

var Q, BufferSize: DWord;

R: THandle;

Buf: ^Buffer;

P: Pointer;

NR: ^NETRESOURCE;

NREsource: NETRESOURCE;

I: Integer;

Err: Integer;

Path: string;

Sr: TSearchRec;

begin

NR:= L. Items [ListBox1. ItemIndex];

Move (NR^, NResource, SizeOf(NETRESOURCE));

ListBox1. Clear;

Path:= NResource.lpRemoteName;

Err:=WNetOpenEnumA (RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @NResource, R);

for I:= 0 to L. Count -1 do

begin

Dispose (L. Items[I]);

end;

L. Clear;

if Err = NO_ERROR then

begin

BufferSize:= 1024;

q:=1;

New(Buf);

while WNetEnumResourceA (R, Q, Buf, BufferSize) = NO_ERROR do

begin

begin

P:= Buf;

NR:= P;

ListBox1. Items. Add (NR^.lpRemoteName);

L. Add(Buf);

end;

New(Buf);

end;

Dispose(Buf);

end;

WNetCloseEnum(R);

end;

Отправление сообщений

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

function TForm2.NBName (s:string):string;

const

size=1024;

var

ncb:TNCB;

buf, p:PChar;

i, k:integer;

ch:char;

res:string;

begin

NBName:='';

GetMem (buf, size);

FillChar (ncb, SizeOf(TNCB), 0);

ncb.ncb_command:=char (NCBASTAT);

ncb.ncb_buffer:=buf;

ncb.ncb_length:=size;

for i:=1 to Length (s) do

ncb.ncb_callname [i‑1]:=UpCase (s[i]);

for i:=Length (s) to NCBNAMSZ do ncb.ncb_callname[i]:=' ';

ncb.ncb_callname [NCBNAMSZ‑1]:=#03;

ch:=netbios (addr (ncb));

if (ch<>#0) and (ncb.ncb_retcode<>#0) then Exit;

p:=ncb.ncb_buffer;

with PAdapterStatus (ncb.ncb_buffer)^ do

begin

p:=p+SizeOf (TAdapterStatus);

for i:=0 to name_count‑1 do

begin

with PNameBuffer (p)^ do

begin

if (name [NCBNAMSZ‑1]=' ') and ((ord (name_flags) and UNIQUE_NAME)=UNIQUE_NAME) then

begin

res:='';

for k:=0 to NCBNAMSZ‑2 do if name[k]<>' ' then res:=res+name[k];

NBName:=res;

end;

end;

p:=p+SizeOf (TNameBuffer);

end;

end;

FreeMem (buf);

end;

procedure TForm2. Button1Click (Sender: TObject);

var

handle:THandle;

lpFileName:PChar;

lpNumberOfBytesWritten: Cardinal;

buffer:string;

i:integer;

s:LPSTR;

comp:string;

name, name2:PChar;

name1:string;

namesize:DWORD;

begin

Button1. Enabled:=False;

if RadioButton1. Checked then

begin

comp:=NBName (Edit1. Text);

lpFileName:=PChar ('\\'+comp+'\mailslot\messngr'+#0);

handle:=CreateFile (lpFileName, GENERIC_WRITE, 0, NIL, CREATE_ALWAYS, 0, 0);

if handle=INVALID_HANDLE_VALUE then

begin

ShowMessage ('Error when executing CreateFile()');

end;

buffer:='';

for i:=0 to Memo1. Lines. Count‑1 do

buffer:=buffer+Memo1. Lines. Text+#10+#13;

name1:='';

namesize:=MAX_COMPUTERNAME_LENGTH + 1;

GetMem (name, MAX_COMPUTERNAME_LENGTH + 1);

GetComputerName (name, namesize);

name2:=name;

for i:=0 to namesize‑1 do

begin

name1:=name1+name2^;

name2:=name2+1;

end;

FreeMem (name);

buffer:=name1+#0+Edit1. Text+#0+buffer;

s:=LPSTR (buffer);

WriteFile (handle, s^, length (buffer) – 2, lpNumberOfBytesWritten, NIL);

if length (buffer) – 2<>lpNumberOfBytesWritten then

begin

ShowMessage ('Error when writing file. Number Of Bytes Written: '+IntToStr (lpNumberOfBytesWritten));

end;

CloseHandle (handle);

end;

Button1. Enabled:=True;

end;

Используя функции NetBIOS, процедура Tform2.NBName определяет. является ли адресат пользователем удалённой машины или данное имя является самим компьютером, а также, не является ли адресат рабочей группой сети Microsoft.

Также, часть данной процедуры определяет, запущена или нет на данной машине ещё одна программа «всплывающих сообщений». Так как для совместимости с аналогичными программами требуется указать одно и то же имя почтового слота (в данном случае, имя компьютера, на котором запущено данное приложение), то при наличии другой подобной программы показывается окно с кодом ошибки. Код ошибки определяется средствами NetBIOS и в данной дипломной работе реализована процедурой NBName.

Рис. 1.11. Ошибка при создании почтового слота

Коды ошибок, выдаваемые NetBIOS, указаны в техническом проекте.

Структура приёма сообщений

Прикладная программа, используя интерфейс WinAPI и встроенные функции Windows, постоянно опрашивает почтовый слот на наличие приходящего сообщения. В отличие от DOS, например, в котором данная реализация представляла бы бесконечный цикл и все ресурсы компьютера уходили бы на ожидание сообщения, операционная среда Windows позволяет создавать такие циклы без практической потери ресурсов, разделяя части программы на потоки (threads). При наличии сообщения в почтовом слоте оно передаётся в программу средствами NetBIOS. Почтовый слот может содержать в себе любое количество сообщений, независимо от того, когда они все будут востребованы данной программой.

Прием сообщений можно реализовать следующим образом:

Var L: Tlist;

procedure TForm1. ShowMess;

var

p:PChar;

s:string;

begin

Memo1. Clear;

p:=L. Items[Current];

s:='Message from ';

repeat

s:=s+p^;

p:=p+1;

until (p^=#0);

p:=p+1;

s:=s+' to';

repeat

s:=s+p^;

p:=p+1;

until (p^=#0);

Label1. Caption:=s;

p:=p+1;

s:='';

repeat

s:=s+p^;

p:=p+1;

until (p^=#0);

Memo1. Lines. Add (s);

StatusBar1. Panels[0].Text:='Current message: '+IntToStr (current+1);

StatusBar1. Panels[1].Text:='Total number of messages: '+IntToStr (L. Count);

end;

procedure TForm1. Timer1Timer (Sender: TObject);

var

lpNextSize:DWORD;

lpMessageCount:pointer;

buffer:PChar;

lpNumberOfBytesRead:DWORD;

MessageCount, all:DWORD;

s:string;

begin

lpMessageCount:=addr (MessageCount);

if GetMailslotInfo (h, nil, lpNextSize, lpMessageCount, nil) then

begin

if lpNextSize<>MAILSLOT_NO_MESSAGE then

begin

Beep;

all:=MessageCount;

while all<>0 do

begin

GetMem (buffer, lpNextSize);

if ReadFile (h, buffer^, lpNextSize, lpNumberOfBytesRead, nil) then

begin

s:='';

L. Add (buffer);

StatusBar1. Panels[1].Text:='Total number of messages: '+IntToStr (L. Count);

if L. Count=1 then begin current:=0; ShowMess; end;

GetMailslotInfo (h, nil, lpNextSize, lpMessageCount, nil);

end

else FreeMem (buffer);

all:=all‑1;

end;

end;

end;

end;

Процедура Timer1Timer является ядром получения сообщений, в то время как ShowMess – реализацией выдачи сообщения на экран в виде, понятном пользователю.

Строки

StatusBar1. Panels[0].Text:='Current message: '+IntToStr (current+1);

StatusBar1. Panels[1].Text:='Total number of messages: '+IntToStr (L. Count), входящие в состав данной процедуры, характеризуют номер сообщения по счёту всего количества сообщений и количество всех сообщений.

С учетом вышеописанного, пришедшее сообщение выглядит таким образом:

Рис. 1.12. Пример полученного сообщения

Используя кнопки навигации, можно легко просматривать все пришедшие сообщения, одновременно использую другие функции Messenger’a.

Рис. 1.13. Обзор пришедших сообщений

В данном разделе в части литературного обзора были рассмотрены общие положения, применяемые разработчиками программного обеспечения средств передачи информации в сетях Microsoft, даны основные подходы создания программ отправки и принятия сообщений; показан пример разработки данного программного обеспечения.

В разделе «Постановка задачи» были рассмотрены требования к системе.

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

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

В целом представлена полная и объективная картина, отражающая содержание выполненных работ по проектированию программ работы с сетевыми протоколами операционных систем семейства Windows, созданию алгоритмов реализации аналогичного программного обеспечения и их программной реализации.

Разработка программ в среде Borland Delphi 5 относится к технологии RAD (Rapid Application Development) – быстрое создание приложений. До появления RAD‑средств делались попытки облегчить труд программиста, сделать этот труд более продуктивным, повысив этим быстродействие и удобство создания приложений. Первоначально появились интегрированные среды разработки – IDE (Integrated Development Environment), объединяющие компилятор, специальный текстовый редактор, ориентированный на работы с текстами на целевом языке программирования и средства отладки – трассировщик, дебаггер и другие. По сравнению с предыдущими средствами программирования это был большой шаг вперед, но затем появились CASE‑средства, которые позволяли максимально визуализировать процесс создания программы, но пользоваться ими было чересчур неудобно из-за их негибкости. В большинстве случаев написать достаточно сложную программу было очень трудно. Средства RAD, взяв все лучшее из интегрированных сред разработки и CASE систем, объединили гибкость работы с исходными текстами с удобством создания графического интерфейса пользователя – GUI (Graphic User Interface). К сожалению, большинство RAD‑средств не позволяют визуализировать логику самой программы, но и те методы, которые заложены в Delphi 5, позволяют поднять производительность разработки программ в 2–3 раза.

Особенности разработки программ в среде Delphi 5

Основными подходами к программированию на Delphi являются визуальная компонентность и многократное использование кода. Рассмотрю каждый из этих методов в отдельности.

Визуальная компонентность

Данный подход является логическим развитием объектно-ориентированного программирования (ООП). Каждый компонент имеет свои события (events), методы (methods) и свойства (properties). Методы и события пришли из объектно-ориентированного программирования, а свойства являются привилегией компонентного подхода. Свойства позволяют изменить состояние компонента, причем как динамически – во время работы программы, так и статически – визуально во время разработки. Естественно, что компоненты имеет все те особенности, что и объекты в объектно-ориентированном программировании – наследование, полиморфизм и инкапсуляция.

Многократное использование кода

Термин «многократное использование кода» (code reuse) говорит сам за себя. Данная технология подразумевает возможность написания таких участков программ, которые затем с небольшими изменениями (или совсем без изменений) могут быть использованы в другой программе. Нельзя сказать, что такой подход является привилегией RAD-средств: еще раньше программисты поняли преимущества возможности выделения универсальных и часто используемых подпрограмм в отдельные библиотеки (модули). Таким образом, появлялись библиотеки подпрограмм для различных языков программирования, работающие с графикой, базами данных, реализующие многие математические функции и прочие универсальные задачи. Но именно в RAD‑средствах технология многократного использования кода приобрела законченный и целостный вид – существует широкий набор стандартных компонентов, которые могут использоваться во многих программах различного типа.

Сложность данного подхода в изменении идеологии программирования – разработчик должен изначально ориентироваться на создания кода, который затем можно будет многократно использовать. Особенно актуальна эта проблема для групп разработчиков. В этом случае необходимо мыслить глобально, с учетом требований всех членов группы и перспективы дальнейших разработок.

Кроме описанных выше средств, существует также некоторый набор инструментов, назначение которого состоит в автоматизации рутинной работы по написанию операционных сред, графических интерфейсов и т.д.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
428
Средний доход
с одного платного файла
Обучение Подробнее