Событие |
Происходит в приложении |
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;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.