Problème simple avec "TclientSocket" - Delphi 7

Metsys Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
berrayahkamel Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, j'aimerais faire un petit client en mode console qui tente plusieurs fois de se connecter au serveur, mais qui une fois connecté -> stop les tentatives et reste connecté.

Sauf que voilà: moi mon code il créer de nouvelles connexions en boucle :/
Mon code: http://pastebin.com/5ZuR9DNX

Merci :3
A voir également:

1 réponse

berrayahkamel Messages postés 174 Date d'inscription   Statut Membre Dernière intervention   64
 
donc ton programme est le suivant

begin

sock:= TclientSocket.Create(nil);
sock.Address := '127.0.0.1';
sock.port := 1337;

While Sock.Active=false do
begin
sock.Open;
Writeln(sock.Address+' # '+inttostr(sock.port));
sleep(2500)
end;



D'après mon expérience la propriété Active n'ai pas fiable .

Quand tu fait open il faut vérifier ce que la fonction open retourne surtout en mode Blocking sinon elle n'a pas de sens .


Je suppose que ut utilise le mode nonbloking

donc ce qui tu fait est faut car :

un sleep de 2.5 seconde pas suffisant meme en local car sur les OS actuels (win7 ou 8 ou vista ) il y a plein de controle que le systeme doit faire avant qu'il t'autorise à d'ouvrir une socket ajouter aussi les anti-virus et les firewall.

D'pares mes tests sous win7 et meme XPsp3 des fois une connexion soket en local demande jsuqu'à 30 secondes

ta boucle doit être comme suite :

timeOutMax= 30;

sock.open;

while(timeOut < timeOutMax and Sock.Active=false ) do

begin



sleep(100);
inc(timeOut);

end;


if( timeOut>= timeOutMax) then Echec de connexion ( à toi de voire ce que tu vexu faire exemple un simple goto debut mais il fait mettre sock.close )

else c'est ok


== Il faut etre sure que ton serveur fonctionne donc fait : telnet 127.0.0.1 1337 au moins vous devriez avoir un écran noir mais pas d'erreur


Je vous conseil par contre d'utiliser l'objet TTCPclient

voila moi comment je l'utilise pour vérifier une connexion SSH





function TFormMain.SSHtest: Boolean;
var
delais: Integer;
begin

exit;

TimerControle.Enabled := false;

TcpClientSSH.RemoteHost := IPServeur;
TcpClientSSH.RemotePort := '22';
// TcpClientSSH.BlockMode := bmBlocking;
TcpClientSSH.BlockMode := bmNonBlocking;

if (TcpClientSSH.Connected) then
begin
MemoDiag.Lines.Add(' Service ssh UP ');
// TimerErreur.Enabled := false;
SShStatus := true;
end

else
begin

TcpClientSSH.Connect;
// Attente une seconde
delais := 0;
while (not(TcpClientSSH.Connected) and (delais < 10)) do
begin
inc(delais);
Application.ProcessMessages;
sleep(100);
end;
if (TcpClientSSH.Connected) then
begin
MemoDiag.Lines.Add(' Service ssh UP ');
// TimerErreur.Enabled := false;
SShStatus := true;
end
else
begin
MemoDiag.Lines.Add(' Service ssh Down ');
// TimerErreur.Enabled := true;
SShStatus := false;
end;

end;

SSHtest := SShStatus;

TimerControle.Enabled := true;
end;
2