Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2327 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  fonctionnement TIdTCPServer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonctionnement TIdTCPServer

n°1249604
ZZZzzz
Posté le 21-11-2005 à 10:21:32  profilanswer
 

Bonjour,
 
J'aimerai coder une application serveur qui accepte des connexions TCP sur le port 1025.
 
J'ai donc utilisé un TIdTCPServer avec "DefaultPort" = 1025 et défini "Bindings" de telle sorte qu'il accepte toutes connexion sur le port 1025. Ensuite au runtime j'active/désactive le serveur sur le clique d'un bouton.
 
J'ai plusieurs problèmes et questions :
 
* Cette propriété "Bindings" est-elle indispensable ? je veux dire en indiquant "DefaultPort" à 1025 et en définissant aucun "Bindig" le serveur ne devrait-il écouter sur ce port et allouer automatiquement les sockets en utilisant ce port si besoin comme semble l'indiquer la doc Delphi : "TIdTCPServer uses the DefaultPort number to bind allocated sockets handles when the Active property to set to True." ?
 
* J'utilise un IdTCPClient avec la propriété "Port" = 1025 et je me connecte. En définissant l'événement "OnStatus" du client ainsi :  
 
procedure TFormTCP1.IdTCPClientStatus(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
begin
   MemoClient.Lines.Add( 'Status : "'+AStatusText+'"' );
end;

 
Je constate que mon client se connecte très bien....
 
par contre :  
 
* Sur le serveur en définissant l'événément "OnConnect" ainsi :
 
procedure TFormTCP1.ConnectServer;
begin
   MemoServeur.Lines.Add( 'Connexion => '+FIdPeerThread.Connection.Socket.Binding.PeerIP+':'+
                          IntToStr( FIdPeerThread.Connection.Socket.Binding.PeerPort ) );
end;
procedure TFormTCP1.IdTCPServerConnect(AThread: TIdPeerThread);
begin
   FIdPeerThread:= AThread;
   AThread.Synchronize( ConnectServer );
end;

 
 
Je ne constate aucune connexion (pourtant le client se connecte au localhost, sur lequel tourne également le serveur ?).
 
=> Pourtant il ne peut y avoir qu'un serveur TCP qui écoute sur un port donné je suppose donc où est le problème ?
=> D'ailleurs quand je relance mon programme pour la seconde fois j'ai une erreur "Impossible d'établir une liaison avec le socket. L'adresse et le port sont déjà utilisé." ?? Cela prouve ce qu'un seul serveur TCP peut écouter sur un port donné à un instant donné mais je ne comprend pas comment l'ancien serveur peut toujours écouter ? Peut-être aurais-je du forcer un "Active:= false" avant la terminaison du programme ? En même temps le composant devrait le faire automatiquement avant sa destruction non ?
 
 
Merci de m'éclairer car certains choses demeurent flou pour moi avec ces composants.

mood
Publicité
Posté le 21-11-2005 à 10:21:32  profilanswer
 

n°1249718
ZZZzzz
Posté le 21-11-2005 à 12:21:20  profilanswer
 

up

n°1249919
ZZZzzz
Posté le 21-11-2005 à 15:07:22  profilanswer
 

up

n°1250034
ZZZzzz
Posté le 21-11-2005 à 16:48:30  profilanswer
 

personne ?

n°1250478
ZZZzzz
Posté le 22-11-2005 à 08:15:11  profilanswer
 

up

n°1250669
ZZZzzz
Posté le 22-11-2005 à 12:43:48  profilanswer
 

:(

n°1252040
ZZZzzz
Posté le 24-11-2005 à 09:16:16  profilanswer
 

J'ai entendu dire qu'il fallait utiliser le port 49153 au minimum (pour une sombre histoire de déclaration pour les ports < 49153), mais je n'arrive toujours pas à recevoir l'événément de connexion sur mon serveur. De plus désormais le client m'indique "Erreur de socket #10067 : connexion refusée" ...  
 
je comprend rien et pourtant... c simple ce que je veux faire à la base

n°1253369
ZZZzzz
Posté le 25-11-2005 à 16:53:19  profilanswer
 

Bon c'était à cause de la propriété "IdTCPServer.CommandHandlersEnabled" qui était = false... je comprend pas pourquoi ?! en passant à true tout rentre dans l'ordre mais en lisant l'aide je vois pas le rapport avec le message d'erreur qui indiqaut que le port et l'adresse était déjà utilisée.  
 
Pour continuer mon monologue j'ai compris que si on surchage 'OnExecute' il faut mettre un "Sleep" dedans sous peine de bouffer tout le temps machine.  
 
J'ai une autre erreur maintenant, quand je connecte mon client, je reçois un événément de connexion sur le serveur immédiatement suivi d'un événement de déconnexion ? du coup je n'arrive pas à récupérer du texte de mon client...
Par contre comprend toujours pas comment fonctionne les connexions, lorsque je déconnecte mon client, Le OnExecute correspondant sur le serveur est toujorus appelé tant que je met pas active à false. Que se passe-t-il ? il faut déconnecter des 2 côtés ? je pensais qu'il étais plus propre que ce soit le client qui se charge de la connexion et déconnexion ??


Message édité par ZZZzzz le 25-11-2005 à 16:54:05
n°1253756
ZZZzzz
Posté le 26-11-2005 à 16:19:47  profilanswer
 

up


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  fonctionnement TIdTCPServer

 

Sujets relatifs
Fonctionnement de include()probleme de fonctionnement : 2datagrid avec chacun un buoton de cmd
Explications le fonctionnement des marges ds IE please!fonctionnement hardware.fr
Fonctionnement prgm delphi .net sur poste client ?fonctionnement processeur
POSIX : Fonctionnement aléatoirefonctionnement de easyphp????
le fonctionnement de Directx et Opengl ?[JDBC] Installation et fonctionnement du driver avec MySQL
Plus de sujets relatifs à : fonctionnement TIdTCPServer


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)