Sockety - Blad - I ponowne polaczenie...

0

napisalem program... gdy sie wlaczy bez problemu mozna sie polaczyc... wtedy zaluzmy, ze nie ma nagle internetu na serwerze... wyskakuje blad czy cos w tym rodzaju... staram sie polaczyc ponownie, ale juz jest nic z tego... jedynym wyjsciem jest reczne zrestartowanie serwera. Pytanie czy jest mozliwosc, jakos programowo sprawic, aby mozna bylo sie znowu polaczyc bez potrzeby restartu ?

Myslalem, aby w serwerze w "OnError" dalem serversocket1.active:=false potem w timerze na true i probowalem sie polaczyc, ale tez nic nie szlo...

0

mam tez funkcje na odkrywanie internetu... moze sie na cos przydac...

function Connected: Boolean;
var
Flags: DWORD;
begin
 Flags := INTERNET_CONNECTION_MODEM or INTERNET_CONNECTION_LAN or
                INTERNET_CONNECTION_PROXY or INTERNET_CONNECTION_MODEM_BUSY;
Result := InternetGetConnectedState(@Flags, 0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false;
if Connected=true then
 begin
  try
 showmessage('jest');
  except
 Timer1.Enabled:=true;
 end;
end;
if Connected=false then begin
 Timer1.Enabled:=true;
end;
end;
0

kod serwera

0

kod serwera... a dokladnie ?

0

dokładnie to co Twój serwer robi po zerwaniu połączenia i jak jest obsługiwane połączenie (czyli co się dzieje po nawiązaniu połączenia)

0

no wiec wlasnie nic sie nie robi, bo nic nie ma... Gdy sie polaczy nic nie robi... W OnClientRead mam odbieranie danych...
no i w OnClientError i OnClientDisconnet próbowalem dac timer, a w nim serversocket.active:=true; ale nie przynosilo to skutku...

0

ale jak się klient rozłączy (z jakiegokolwiek powodu) to klient musi ponownie zainicjować połączenie bo klient nie nasłuchuje tylko serwer

0

tak ja wiem, ze nasluchuje tylko serwer, a klient nie i trzeba recznie kazac sie polaczyc... problem wlasnie w tym jest taki, ze gdy w serwerze braknie neta, a potem jest to gdy potem zainicjuję polaczenie przez klienta do serwera to juz sie nie laczy... (dopiero gdy zrestartuje caly program - server). Myslalem, ze wystarczy w serverze w OnDisconnet wzucic timer ktory sprawdza czy jest net i potem aktywuje server.active:=true; . Problem w tym, ze chyba nie tedy droga... No i nie wiem....

0

?? :)

0

moze jak neta nie ma to najpierw deaktywuj serwer, a potem aktywuj? a w ogole, to moze sproboj zrestartowac klienta zamiast serwera?

w najgorszym wypadku zrob dynamiczne generowanie komponentu serwera w oddzielnym watku i jezeli jest cos nie tak, to wylaczasz komponent, zabijasz watek i znowu tworzysz? Nie wiem jak jest z komponentami w watkach przy ich zabijaniu, wiec tego sie musisz dowiedziec jeszcze albo po prostu poprobowac :P. Ale mimo wszystko mysle, ze masz cos nie tak w kodzie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0