Обмен текстовой информацией между компьютерами в локальной сети, страница 2

Событие

Происходит в приложении

OnClientContact

сервера

OnConnect

клиента

OnMsg

сервера

OnMessageSend

клиента

OnDisconnect

сервера

OnDisconnect

клиента

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

запись свойства Host

События в приложении-клиенте

IP - адрес

OnConnectinFailed

генерируется исключение

URL

OnlnvalidHost

генерируется исключение

Описанные последовательности событий возникают, если в компонентах NMMsgи NMMSGServсвойства ReportLevelзаданы равными 0. Если ReportLevel> 0, то добавляется множество событий Оп-Statusс различными значениями параметра Status. При ReportLevel= 16 и успешном выполнении метода Postltгенерируются следующие события:

Событие

Status

OnStatus клиента

"Connecting"

OnStatus клиента

"Resolve Host"

OnStatus сервера

"Accepting"

OnStatus клиента

"Timer On" (попытка соединиться с сервером)

OnClientContact сервера

-

OnStatus клиента

-

OnStatus клиента

"Timer Off

OnStatus клиента

"Write"

OnStatus клиента

"Sending Buffer"

OnStatus клиента

"Timer On"

OnStatus клиента

"Timer Off

OnStatus клиента

"Sending Buffer"

OnStatus клиента

"Timer On"

OnMSG сервера

-

OnStatus клиента

"Timer Off

OnMessageSend клиента

-

OnStatus клиента

"Read (16)"

OnStatus клиента

"Disconnect"

OnStatus клиента

"Request Close Socket"

OnDisconnect сервера

-

OnDisconnect клиента

-

Кроме того, при запуске сервера наступает его событие OnStatusсо значением Status= "Listening".

4 ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

4.1      Постройте главную форму приложения, как показано на рис. 1.

В окне Ник указывается произвольно имя, которое видит получатель в своем приложении. В окне Адрес получателя указывается IP-адрес компьютера получателя. В окне Текст сообщения вводится само сообщение. Передача сообщения осуществляется по нажатию кнопки Передать. Сообщение отправляется адресату, в окне Протокол диалога появляется строка с датой, временем, именем отправителя и текстом сообщения. Если в момент прихода сообщения окно приложения неактивно, то пиктограмма приложения в полосе состояния начнет мигать. Кнопки Очистить и Сохранить позволяют соответственно очистить и сохранить в файл протокол диалога.

4.2     На форме приложения должны находиться компоненты NMMsg, NMMSGServ, три окна редак­тирования, три кнопки, четыре метки, компонент RichEditи диалог сохранения SaveDialog. Кроме того, для реализации эффекта мигания пиктограммы приложения необходимы компоненты Timerи Applica-
tionEvents.

4.3В функции BPostClick производится обработка нажатия на кнопку Передать. Функция NMMsgllnvalidHost  обрабатывает исключение, возникающее при неправильном указании адреса.Функция NMMSGServlMSG обрабатывает событие OnMSGкомпонента NMMSGServ, возникающее при
получении сообщения.

4.4Выполните отладку приложения на локальном компьютере (Host= 127.0.0.1). Протестируйте работу приложения в сети. Отследите ошибочные ситуации, возникающие при установке связи с удален­ным компьютером, используя возникающие события клиента и сервера, а также параметр Status.

5 СОДЕРЖАНИЕ ОТЧЕТА

4.1 Цель работы.

4.2Порядок выполнения работы.

4.3Полный текст программы.

4.4Результаты выполнения программы.


6 ПРИМЕР РЕАЛИЗАЦИИ ПРИЛОЖЕНИЯ

%i Обмен сообщениями


Ник:


Адрес получателя:        Протокол диалога:





Рисунок 1 - Возможный вид главной формы приложения
--------------------- Код приложения--------------

void___ fastcall TForml::BPostClick(TObject *Sender)


try

{

NMMsgl->Host = EHost->Text; NMMsgl->FromName = EWho->Text; NMMsgl->PostIt(EPost->Text) ; RichEditl->Lines->Add(FormatDateTime("", RichEditl->Lines->Add(EPost->Text) ;


 EWho->Text)


catch (...)

ShowMessage("Неверный адрес");

void_ fastcall  TForml::NMMsglInvalidHost(bool   SHandled)

{

AnsiString SHost;

SHost = NMMsgl->Host;

if (InputQuery("Ошибочный адрес",

"Вы можете указать новый адрес", SHost)) {

NMMsgl->Host = SHost; Handled = true;

void___ fastcall TForml::NMMSGServlMSG(TComponent *Sender,

const AnsiString sFrom, const AnsiString sMsg)

{

if ( ! Application->Active )

{ Timerl->Enabled = true;


Веер(); }

RichEditl->Lines->Add(FormatDateTime("",Now() ) +": " + sFrom) RichEditl->Lines->Add(sMsg);

void___ fastcall TForml::BSaveClick(TObject *Sender)

{

if(SaveDialogl->Execute() ) RichEditl->Lines->SaveToFile(SaveDialogl->FileName)

void___ fastcall TForml::BClearClick(TObject *Sender)

{

RichEditl->Clear();

}

//------------------------------------------------------------------------------------------

void___ fastcall TForml::TimerlTimer(TObject *Sender)

{

FlashWindow(Application->Handle,true);

}

//---------------------------------------------------------------------------------------

void __ fastcall TForml::ApplicationEventslActivate(TObject *Sender)

{

Timerl->Enabled = false;