- •Глава 1. Специальная часть. Разработка программного обеспечения управления автоматизированным комплексом многоканальной связи
- •Глава 2. Технологическая часть. Технология программирования и средства отладки в среде Borland Delphi 5
- •Глава 3. Сегментация потребителей программы передачи и приёма сообщений
- •1.1. Эскизный проект.
- •1.1.1. Описание протоколов, используемых при написании дипломной работы
- •1.2.2. Обзор аналогичных программ принятия и отправки сообщений.
- •1.3. Технический проект.
- •1.3.1. Общая структура системы
- •1.3.1.1. Почтовый слот (mailslot)
- •1.3.1.1.2.Чтение из почтового слота.
- •1.3.1.2. Протокол NetBios и его команды.
- •1.3.1.2.1. Структура ncb.
- •1.3.1.2.2. Коды ошибок и их значения блока ncb
- •1.3.2. Визуальные компоненты Delphi, используемые при разработке данного дипломного проекта.
- •1.3.3. Требования, предъявляемые к программе отправки и приёма сообщений.
- •1.3.4. Выбор платформы проектирования, обоснование.
- •1.3.5. Конфигурация технических средств.
- •Рабочий проект.
- •1.4.1. Интерфейс программы.
- •1.4.2. Описание с методы работы с программой Messenger
- •1.4.3. Поиск компьютеров в локальной сети.
- •1.4.4. Отправление сообщений.
- •1.4.5. Структура приёма сообщений.
- •1.4.6. Заключение.
- •2.1. Введение.
- •2.2. Особенности разработки программ в среде Delphi 5.
- •2.2.1. Визуальная компонентность.
- •2.2.2. Многократное использование кода.
- •2.3. Cоздание программ в среде Delphi.
- •2.4. Основные этапы решения задач на эвм.
- •2.5. Методы и средства отладки
- •2.5.1.1. Контроль текста
- •2.5.1.3. Проверка
- •2.5.1.4. Прокрутка
- •2.5.1.5. Печать текста
- •2.5.3.1. Алгоритмическое тестирование
- •2.5.3.2. Функциональное или аналитическое тестирование
- •2.5.3.3. Содержательное тестирование
- •2.6. Типы тестов
- •2.6.3. Аварийный тест
- •2.6.4. Стыковочные тесты
- •2.6.5. Комплексные тесты
- •2.7. Локализация ошибок
- •2.8.Интегрированный отладчик Delphi
- •2.9. Пошаговая отладка
- •2.10. Заключение
- •3.1. Введение
- •3.1.1. Методика определения сегментов рынка.
- •3.1.2. Поиск сегментов рынка для программы посылки сообщений.
- •3.2. Выводы
- •4.1. Факторы при работе с компьютером
- •4.2 Организация рабочего места пользователя эвм
- •4.2.1 Интенсивность труда
- •4.2.2. Электробезопасность
- •4.2.3. Пожаробезопасность.
- •4.2.4. Микроклимат
- •4.3. Освещённость рабочего места.
- •4.4. Шум. Общие требования безопасности
- •4.5. Психофизиологические факторы
- •4.6. Расчёт воздухообмена
- •4.7. Выводы
1.4.4. Отправление сообщений.
Приведем часть кода программы, реализующую отправление сообщений:
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, указаны в техническом проекте.