Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.05;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
15-1184083274
Курдль
2007-07-10 20:01
2007.08.05
Oracle. Прокси - аутентификация.


2-1182810055
|
2007-06-26 02:20
2007.08.05
Как выключить питание у компа


15-1183979611
antonnn
2007-07-09 15:13
2007.08.05
IE не проигрывает flash


2-1183875434
Igor Mish
2007-07-08 10:17
2007.08.05
Работа с COM 1


15-1183701777
D.T.
2007-07-06 10:02
2007.08.05
Редактор моделей