Bonjour à tous,
Je voudrais savoir comment savoir si un TServerSocket (un certain port sur une certaine adresse IP) est connecté ou pas.
Merci d'avance.
Bonjour à tous,
Je voudrais savoir comment savoir si un TServerSocket (un certain port sur une certaine adresse IP) est connecté ou pas.
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if Server1.Active then ...
Merci, mais ce que je veux dire, c'est vérifier si un serveur ne se trouvant pas dans l'applications (sur un autre ordinateur) est connecté ...
le plus simple selon moi c'est d'essayer de se connecter au serveur en question !
si la connection échoue et que tu es certain de l'accessibilité de la machine, alors le serveur en question n'est pas à l'écoute.
Utilises un composant socket client comme TClientSocket par exemple, configure ses propriétés sur l'IP de ton serveur et son port d'écoute, puis lance la connection avec celui-ci.
si une connection s'établit, ton serveur est à l'écoute, sinon il ne l'est pas.
J'ai déjà essayé cette solution, mais le problème c'est que lorsque le serveur n'éxiste pas, il renvoit une exception qui arrête le programme ...
Ce dont j'aurais besoin, c donc un code permettant de gérer le fait qu'une connection echoue à cause du fait que le serveur est introuvable ...
salut Matt2094 voila un petit code qui pourrait te guider :
place un TClientSocket deux TEdit et un TButton, puis utilise ce code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp; type TForm1 = class(TForm) ClientSocket1: TClientSocket; Button1: TButton; Edit1: TEdit; Edit2: TEdit; procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure Button1Click(Sender: TObject); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocket1Connecting(Sender: TObject; Socket: TCustomWinSocket); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); var s:string; begin case ErrorEvent of //survient du fait que le serveur auquel on désire se connecter est introuvable eeLookup: s := 'Adresses introuvable'; // eeGeneral: s := 'Le socket reçoit un message d''erreur ne correspondant à aucune des catégories suivantes.'; // eeSend: s := 'Une erreur a eu lieu lors d''une tentative d''écriture dans la connexion de socket.'; // eeReceive: s := 'Une erreur a eu lieu lors d''une tentative de lecture dans la connexion de socket.'; // eeConnect: s := 'Une demande de connexion déjà acceptée n''a pas pu être achevée.'; // eeDisconnect: s := 'Une erreur a eu lieu lors d''une tentative de fermeture de la connexion.'; // eeAccept: s := 'Un problème s''est produit lors d''une tentative d''acceptation d''une demande de connexion cliente.'; end; ShowMessage( s + #13' Code d''erreur = ' + IntToStr( ErrorCode ) ); //code d'erreur à mis zéro pour éviter le déclenchement d'une exception ErrorCode := 0; end; procedure TForm1.Button1Click(Sender: TObject); begin //fermer le socket self.ClientSocket1.Active := false; //nom de l'hôte auquel on se connecte self.ClientSocket1.Host := self.Edit1.Text; //port sur lequel le serveur écoute self.ClientSocket1.Port := StrToInt( self.Edit2.Text ); //ouverture de la connection self.ClientSocket1.Open(); end; procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin Showmessage('Connecté !'); end; procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin ShowMessage('Déconnecté !'); end; procedure TForm1.ClientSocket1Connecting(Sender: TObject; Socket: TCustomWinSocket); begin Showmessage('Connection en cours...'); end; end.
Justement, ce code (qui est presque le même que celui qu j'ai fais) fait une erreur lors de la connexion qui le serveur n'est pas connecté ...
erreur qui est gérée dans l'évènement OnError du ClientSocket.Envoyé par Matt2094
as-tu testé le code ?
Oui, j'ai recopier éxactement ce code, et même avec la procédure OnError, qui éxécute, il me fais une erreur ...
quel message d'erreur exactement ? message d'erreur du débogueur ? l'application continue son exécution ou alors elle s'arrête ?Envoyé par Matt2094
L'erreur est :
C'est une erreur qui se produit aussi en éxécution normale, donc qui n'est pas seulement sur le débogueur. Et oui, l'application continue. Mais il affiche quand même un msg d'erreur, ce que je veux supprimé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Erreur socket asynchrone 10061
étrange...
utilises-tu exactement le code que j'ai posté ?
l'aide de delphi précise que le paramètre ErrorCode doit être mis à zéro dans l'évènement OnError du ClientSocket pour éviter qu'une exception ne soit lancée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); var s:string; begin case ErrorEvent of //survient du fait que le serveur auquel on désire se connecter est introuvable eeLookup: s := 'Adresses introuvable'; // eeGeneral: s := 'Le socket reçoit un message d''erreur ne correspondant à aucune des catégories suivantes.'; // eeSend: s := 'Une erreur a eu lieu lors d''une tentative d''écriture dans la connexion de socket.'; // eeReceive: s := 'Une erreur a eu lieu lors d''une tentative de lecture dans la connexion de socket.'; // eeConnect: s := 'Une demande de connexion déjà acceptée n''a pas pu être achevée.'; // eeDisconnect: s := 'Une erreur a eu lieu lors d''une tentative de fermeture de la connexion.'; // eeAccept: s := 'Un problème s''est produit lors d''une tentative d''acceptation d''une demande de connexion cliente.'; end; ShowMessage( s + #13' Code d''erreur = ' + IntToStr( ErrorCode ) ); //code d'erreur à mis zéro pour éviter le déclenchement d'une exception ErrorCode := 0; end;
Merci ! Ca marche ! Je n'ai pas d'aide sur les composants TClientSocket et TServerSocket, c'est pour ça que je n'ai pas penser à ça. Merci encore !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager