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

Langage Delphi Discussion :

[D7] Socket récupérer l'indice de connexion


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut [D7] Socket récupérer l'indice de connexion
    Bonjour,

    J'ai un petit soucis... j'utilise des scans qui se connectent sur le même serveur de socket... comment puis-je récupérer leur indice de connexion par rapport à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serverSocket.Socket.Connections[0]
    Histoire de pouvoir renvoyer à chacun la bonne réponse ... (je sais pas si je suis très claire ...

    Merci d'avance
    Windows XP
    Delphi 7

    WinDev Mobile 17

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    Bonjour,

    J'ai un petit soucis... j'utilise des scans qui se connectent sur le même serveur de socket... comment puis-je récupérer leur indice de connexion par rapport à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serverSocket.Socket.Connections[0]
    Histoire de pouvoir renvoyer à chacun la bonne réponse ... (je sais pas si je suis très claire ...

    Merci d'avance
    tu devrais garder un seul thread pour ton projet sinon il est compliqué de te suivre

    à quel moment veux tu parler à un socket sans avoir accès à l'objet correspondant ?! si c'est une réponse, dans l'évènement déclenchant tu dois avoir une référence au socket concerné.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Oui mais vu que le sujet est différent... je savais pas si je pouvais mélanger les deux... si tu préfères décaler le sujet et que tu en as la possibilité hésites pas... désolée

    En fait j'ai plusieurs scans qui se connectent à mon serveur socket j'aimerai savoir comment récupérer leur identifiant en gros pour pouvoir renvoyer le bon résultat au bon scan demandeur ...

    Sur le ClientRead j'ai mon receiveText...
    A la connexion j'identifie mon Scan en récupérant son adresse IP...
    Mais j'aimerai en fait récupérer son identifiant de connexion pour renvoyer avec

    Sachant que 0 correspond au 1er client connecté, si c'est 1 au deuxième connecté... j'aimerai connaitre cet indice là pour pouvoir faire :

    Si client 1 demande toto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Socket.Connexions[0].SendText('toto');
    Si client 2 (celui qui se connecte en deuxième) demande titi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Socket.Connexion[1].SendText('titi');
    Windows XP
    Delphi 7

    WinDev Mobile 17

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Un classique !
    As-tu lu l'aide ?
    API:ScktComp.TServerWinSocket.Connections
    ScktComp.TCustomWinSocket.RemoteAddress

    Tu dois juste faire une boucle for sur Connections (ActiveConnections) et tester RemoteAddress

    Lorsque tu reçois une connection d'un client ou lors d'un message, tu as le socket, tu peux mémoriser son Handle ou son RemoteAddress (l'IP que tu as récupéré), tu peux ensuite procéder comme dans ce sujet Utilisation des Tsocket

    Ce que j'avais fait pour un programme de pilotage de trieuse de vêtement en 2001
    Dans OnRead,
    - je créé un pointer sur un record, celui-ci contenant le Handle du Socket emetteur, les données reçues (découpées et contrôlées) et des statuts
    - j'ajoutais ce pointeur dans une TThreadList pour dispatch
    - je générais aussi un acquittement ajouté dans le record et son pointeur ajouter dans la TThreadList d'envoi et envoyait l'acquittement à l'emetteur

    Dans un thread de dispatch
    - je parcourais la ThreadList (comme une FIFO) et dispatchait les messages aux threads de traitements (via d'autres ThreadList)

    Dans les 3 thread de traitement (message de demande, message d'état, message d'acquittement)
    - j'effectuais un tas de calcul (une sorte de Path Finding) et du SQL
    - j'ajoutais au record la réponse au message et mettait le pointeur dans la ThreadList d'envoi

    Dans un thread d'envoi
    - je prenais la réponse et l'envoyait au socket correspondant au Handle !
    - je mettais le message dans la liste d'attente d'acquittement avec gestion d'un time-out



    J'ai écrit ce programme en 2001, j'étais en Licence Pro, j'étais apprenti, donc stagiaire ... tu devrais essayer de chercher par toi même, de consulter l'aide pour trouver les éléments utiles à ton besoin, le développement c'est de la technique et de la matière grise aussi !
    Allez il faut enlever les petits roues et foncer !
    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 régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    En fait j'ai utilisé le ActiveConnections quand le serveur accepte la connexion je récupère l'id connexion avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      idConnexion := IntToStr(serverSocket.Socket.ActiveConnections - 1);
      oqInsertIdConnexion.Close;
      oqInsertIdConnexion.SQL.Clear;
      oqInsertIdConnexion.SQL.Add('UPDATE adresseip SET idconnexion = :monIdConnexion WHERE adrip = :addIP');
      oqInsertIdConnexion.DeclareAndSet('monIdConnexion', otString, idConnexion);
      oqInsertIdConnexion.DeclareAndSet('addIP', otString, Socket.RemoteAddress);
      oqInsertIdConnexion.Execute;
      oqInsertIdConnexion.Session.Commit;
    Et ensuite je met à jour ma table en fonction de l'adresse ip du scan connecté et au moment où je veux renvoyer le message...
    Je récupère l'id connexion en fonction de l'adresse ip du demandeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    idConnect := RetourneIdConnexion(addIP, oqRechercheAddIP);
     
          envoiMsgSocket(idConnect,addIP +TAB+ sRefXArt +TAB+  sLicXArt + TAB+ sQpsXArt + TAB + sQcsXArt +TAB+ sQseXArt +TAB+ sApiXArt, ServerSocket);
    Grâce à ma fonction RetourneIdConnexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function RetourneIdConnexion(adresseIP : String; oqRechercheAddIP : TOracleQuery) : integer;
     
    begin
    oqRechercheAddIP.Close;
    oqRechercheAddIP.SQL.Clear;
    oqRechercheAddIP.SQL.Add('SELECT idconnexion FROM adresseip WHERE adrip = :monIP');
    oqRechercheAddIP.DeclareAndSet('monIP', otString, adresseIP);
    oqRechercheAddIP.Execute;
     
    RetourneIdConnexion := oqRechercheAddIP.Field(0);
    end;
    Windows XP
    Delphi 7

    WinDev Mobile 17

Discussions similaires

  1. [Tableaux] Récupérer l'indice d'un tableau
    Par emageren dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2006, 10h21
  2. récupérer l'indice de la ligne séléctionner d'une MSFlexGrid
    Par awatif dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/09/2006, 12h50
  3. Récupérer l'indice d'une valeur donnée dans un select
    Par mgemc2 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/08/2006, 11h31
  4. Comment récupérer le nom des connexions réseau
    Par ghyslain84 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/12/2005, 19h48
  5. Comment récupérer l'indice dans un TdxTreeList ?
    Par claude dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2004, 15h17

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