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...

0

wiem, ze trzeba najpier dezaktywowac, a potem aktywowac server... tak tez robie, ale to nie pomaga... restart klienta tez nic nie pomaga... dopiero tak jak mowilem restar programu server pozwala na ponowne polaczenie... kod jest dobry, bo nie ma zadnych bledow i wszystko smiga...

0

Dokladnie ten sam problem, duzo wiecej informacji na jego temat + kod klienta i serwera:

http://4programmers.net/Forum/viewtopic.php?id=105713

Niestety w moim temacie (wyslany przedwczoraj), nikt nie odpisal (czyzby za trudny problem ?) :(

0

a moze sprobojcie zrobic to na jakichs innych kontrolkach, polece ponownie synapse, jeszcze ICS podobno dobry

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