Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Вниз

ICS - проблема дисконнекта   Найти похожие ветки 

 
DeadMeat ©   (2006-12-22 12:49) [0]

Здравствуйте всем!
Решил освоить ICS. Вроде не плохо. Но вот появилась странная проблема. Никак не пойму. Надо написать программку, в которой будет постоянно отслеживаться состояние соединения с сервером. Т.е. должны быть учтены варианты с резким выключением компьютера или выдергиванием сетевого кабеля. Раньше делал с помощью постоянного посылания команды (текстовой) PING и приемки команды PONG. Был свой таймер и в случае отсутствия приема определенное время считалось, что соединения больше нет. Все работает. Но вот захотелось мне попробовать сделать это чуток по другому. Все на том же ICS, на котором и делал.
Так вот.
В DataModul"е (TdmNetData) создаю клиента:

.....
 
 cln := TnetClient.Create(nil);
 with cln do
   begin
     DisplayName := "Local"; // принадлежит классу TnetClient
     DisplayStatus := "Откл."; // принадлежит классу TnetClient
     Connected := false; // принадлежит классу TnetClient
     HostIP := "192.168.1.2"; // принадлежит классу TnetClient
     HostPort := "1973"; // принадлежит классу TnetClient

     Addr := HostIP;
     Port := HostPort;
     Proto := "tcp";

     OnError := WSocketError;
     OnBgException := WSocketBgException;
     OnSessionAvailable := WSocketSessionAvailable;
     OnSessionClosed := WSocketSessionClosed;
     OnSessionConnected := WSocketSessionConnected;
   end;

 with netTimer do
   begin
     Enabled := true;
   end;

.....

type
 TnetClient = class(TWSocketClient)
   public
     DisplayName: string;
     DisplayStatus: string;
     DisplayDesc: string;
     Connected: boolean;

     HostIP: string;
     HostPort: string;
   end;

.....
 
 with cln do
   begin
     if not Connected then
       begin
         Close;
         Addr := HostIP;
         Port := HostPort;
         Proto := "tcp";
         Connect;
         DisplayStatus := "Откл.";
       end
         else
           begin
             DisplayStatus := "Вкл.";
           end;
   end;

.....

procedure TdmNetData.WSocketBgException(Sender: TObject; E: Exception;
 var CanClose: Boolean);
begin
 frmMain.ListBox1.Items.Add("WSocketBgException..."); //для отслеживания (временно)
 with cln do
   Connected := false;
end;

procedure TdmNetData.WSocketError(Sender: TObject);
begin
 frmMain.ListBox1.Items.Add("WSocketError..."); //для отслеживания (временно)
 with cln do
   Connected := false;
end;

procedure TdmNetData.WSocketSessionAvailable(Sender: TObject; ErrCode: Word);
begin
 frmMain.ListBox1.Items.Add("WSocketSessionAvailable - " + IntToStr(ErrCode)); //для отслеживания (временно)
 with cln do
   if ErrCode = 0 then
     begin
       Connected := true;
     end
       else
         begin
           Connected := false;
         end;
end;

procedure TdmNetData.WSocketSessionClosed(Sender: TObject; ErrCode: Word);
begin
 frmMain.ListBox1.Items.Add("WSocketSessionClosed - " + IntToStr(ErrCode)); //для отслеживания (временно)
 with cln do
   begin
     Connected := false;
   end;
end;

procedure TdmNetData.WSocketSessionConnected(Sender: TObject; ErrCode: Word);
begin
 frmMain.ListBox1.Items.Add("WSocketSessionConnected - " + IntToStr(ErrCode)); //для отслеживания (временно)
 with cln do
   if ErrCode = 0 then
     begin
       Connected := true;
     end
       else
         begin
           Connected := false;
         end;
end;


Сервер создан в дизайнтайм и основан на TWSocketServer.
Собсна проблема вот в чем. Запускаю клиента. Запускаю сервер. Клиент подключается к серверу. Закрываю сервер. Клиент все еще "думает", что он подключен. Т.е. событие OnClose и иже с ним не приходят. А вот если запустить в начале сервер, а потом клиент и закрыть сервер, то все проходит нормально. Клиент "видит", что коннекта больше нет. И события приходят как надо. А вот если наоборот, то никак.
Версия v6 последняя с сайта. Вроде ноябрьская. Использую в BDS2006.

ЗЫ. Вроде как если клиента полностью оформить в дизайн тайм, то он все подключения и отключения видит прекрасно. А вот в рантайм - вот такая ошибка. В чем может быть дело? Глюк или я чего то не понимаю? В дизайн тайме все тоже самое - работает прекрасно. В ран тайме - никак.


 
DeadMeat ©   (2006-12-23 16:58) [1]

Неужели никто с таким поведением этих компонент не сталкивался?


 
DeadMeat ©   (2006-12-25 18:30) [2]

Я конечно извеняюсь за флуд, но все же никто не знает?


 
DeadMeat ©   (2006-12-28 10:42) [3]

Ну хотя бы в мой день рождения, кто-нибудь сможет помочь? ))


 
umbra ©   (2006-12-28 13:33) [4]

нужен спец по ICS. Если в дизайн-тайме все работает, то можно посмотреть в исходники конструктора клиента. Может там свойство какое-нибудь устанавливается (таймаут какой-нибудь). К тому же непонятно, как отслеживается наличие коннекта



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.044 c
4-1171636729
Vemer
2007-02-16 17:38
2007.08.05
Как уничтожать назначенный Brush?


3-1177420938
КрЫска
2007-04-24 17:22
2007.08.05
Какую технологию лучше использовать для доступа к БД Oracle


2-1183989923
gentos
2007-07-09 18:05
2007.08.05
QReport


15-1184208227
Slider007
2007-07-12 06:43
2007.08.05
С днем рождения ! 12 июля 2007 четверг


1-1180514571
_vl_
2007-05-30 12:42
2007.08.05
Перевод номера месяца в символьное представление месяца





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский