IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

COM TCP avec 2 équipements utilisant le même port


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut COM TCP avec 2 équipements utilisant le même port
    Bonjour,

    Je sollicite votre aide sur le point suivant.
    Je souhaite communiquer en TCP avec deux équipements utilisant le même port (4007).
    En première partie j'utilisais un seul équipement et les échanges étaient corrects.
    Pour ce faire sous delphi XE7 j'utilise le composant TipwIPPort (IP*WORK V9).
    Le problème est avec la mise en place du 2e équipement avec un 2e composant IPPort.
    La réception des trames se mélange entre les deux, certainement par l'utilisation du même port le 4007.
    Y a-t-il une solution pour gérer cette situation, les ports ne sont pas modifiables sur les équipements ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    si je comprend bien tu as un PC client qui se connecte à deux équipements distants offrant un service TCP sur le port 4007

    tu as donc deux connexions distinctes vers deux adresses différentes utilisant le même port...dans ce cas tu as localement deux ports (différents de 4007, et différentes entre eux) sur lesquelles dialogues les équipements distants et il ne peut pas y avoir de confusion...l'erreur est dans ton code.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut
    Merci Paul
    Je confirme utiliser deux composant avec deux adresse Ip différentes le Local port à 0 donc attribué.
    Je vais regarder mon code de nouveau, j'utilise l'évènement OnDataIn et parfois celui de la connexion 1 est déclenché par l'arrivé de data de la connexion 2.
    Si une autre idée sur le sujet.
    Merci

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Tu n'aurais pas branché les mêmes gestionnaires d'évènement sur les deux TipwIPPort et pas gérer le Sender ?
    C'est l'avantage d'un mode blocking avec des TThread où l'on isole naturellement la lecture
    tu dois être en mode asynchrone et tu reçois tout dans le même gestionnaire d'évènement de OnDataIn
    Il n'y a rien de plus simple que des gérer un aiguillage des messages selon l'origine
    Tu dois avoir deux buffers, tu alimentes chacun selon l'origine
    Attention, si tu as de gros paquets de données, tu peux recevoir un message de tes appareils fractionnées en plusieurs morceaux ou alors inversement plusieurs trames collées les unes aux autres.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut
    Merci pour cette nouvelle réponse.

    J'ai bien deux évènements OnDataIn distinct.
    Pour la taille des paquets c'est au maxi 40 octets et j'avais remarqué que les trames courte sont parfois regroupées.
    A quoi sert le Sender et comment le gère t'on?
    Pour l'aiguillage comment connaitre la source du message?
    Merci encore.

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par Tleconte Voir le message
    Merci pour cette nouvelle réponse.

    J'ai bien deux évènements OnDataIn distinct.
    Pour la taille des paquets c'est au maxi 40 octets et j'avais remarqué que les trames courte sont parfois regroupées.
    A quoi sert le Sender et comment le gère t'on?
    Pour l'aiguillage comment connaitre la source du message?
    Merci encore.
    Shai a supposé que les deux composants partageaient le même événement de lecture, et dans ce cas le paramètre Sender permet de savoir qui déclenche le traitement...mais si tu as deux codes distincts ça n'a pas d'importance.

    que fais-tu des données lues ? tu as bien deux conteneurs distincts, un pour chaque composant ?

    en fait ça un peu de code de ton application, on ne peux que faire des suppositions sans pouvoir te répondre plus clairement.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/10/2015, 03h13
  2. Réponses: 2
    Dernier message: 14/03/2012, 15h01
  3. Réponses: 6
    Dernier message: 03/10/2010, 09h45
  4. Utiliser le même port série par deux applications
    Par homeostasie dans le forum Windows
    Réponses: 1
    Dernier message: 25/01/2007, 21h42
  5. Réponses: 8
    Dernier message: 13/03/2006, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo