Problème simple avec "TclientSocket" - Delphi 7

Fermé
Metsys Messages postés 1 Date d'inscription vendredi 28 juin 2013 Statut Membre Dernière intervention 28 juin 2013 - Modifié par Metsys le 28/06/2013 à 01:57
berrayahkamel Messages postés 174 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 6 avril 2020 - 30 juin 2013 à 21:30
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 mardi 31 juillet 2007 Statut Membre Dernière intervention 6 avril 2020 64
Modifié par berrayahkamel le 30/06/2013 à 21:30
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