Robię prosty komunikator, oparty o komponenty TClientSocket i TServerSocket.
Chciałbym, aby aplikacje klienckie automatycznie nawiązywały połączenie z aplikacją serwera, kiedy tylko jest on dostępny w sieci (lokalnej).
Czy coś złego dzieje się w sieci, kiedy serwer jest niedostępny, np. z powodu awarii, a aplikacje klienckie cały czas próbują z nim nawiązać połączenie?
Próbę automatycznego nawiązania połączenia realizuje poniższy kod, przy czym zamiast localhost są adresy komputerów w sieci, a host to adres serwera.
Zakładam, że TimeOut byłby bardzo duży – na tyle, żeby próby nawiązania połącznia trwały ok. 20 godzin.
Komputerów w sieci ma docelowo być ok. 100.
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled := False;
Timer1.Interval := 10000;
ClientSocket1.Address := '127.0.0.1';
ClientSocket1.Port := 60000;
ClientSocket1.Host := '127.0.0.1';
Counter := 0;
TimeOut := 10;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (not ClientSocket1.Socket.Connected) and (Counter < TimeOut) then
begin
Inc(Counter);
ClientSocket1.Active := True;
end
else
Close;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode := 0;
ClientSocket1.Active := False;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer1.Enabled := False;
ClientSocket1.Active := False;
end;