cs_askil2000
Messages postés92Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention12 avril 2010
-
22 juin 2007 à 19:56
cs_askil2000
Messages postés92Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention12 avril 2010
-
23 juin 2007 à 12:20
Bonjour,
Je suis entrain de développer (just for the fun) un testeur de connexion Internet,
celui-ci utilise 2 TClientSocket créé dynamiquement par un system de array en type record :
Sachant que MS est un TClientSocket sur mon form & que les Evénements OnConnect,
OnRead et OnError sont bien là.
Maintenant ma question est un peu complexe, accrochez vous ...
Dans l'evénement OnConnect j'envois au server une variable aléatoire.
Dans l'evénement OnRead je reçois l'information traité, mais seulement
je ne sais pas quel
TFunc[I].Sock
a envoyé la variable qui a permis le traitement,
car mon serveur ne peut me le révéler. Si quelqun a compris quelque chose à se que je viens de dire
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 23 juin 2007 à 11:53
Pfff c'est dur dur en ce moment
Ton evenement OnRead dispose bien d'un sender !!! donc avec un TClientSocket(Sender).tag tu dois retrouver le tag du socket qui a généré l'evenement. Non ?
Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein
cs_askil2000
Messages postés92Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention12 avril 2010 22 juin 2007 à 23:04
Bonsoir WhiteHippo,
J'ai été voir la source que tu m'as proposé, cependant elle ne peut hélasse m'aider car mes sockets sont dynamiques et de plus je n'ai pas acces au serveur.
Je peux donner plus de précisions si toutefois quelqun ne comprenais pas la question.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 22 juin 2007 à 23:32
Soit je ne comprends rien, soit il est vraiment très tard
Avec un TClientSocket, tu as un TCustomWinSocket transmis avec l'événement OnRead qui permet d'obtenir :
les informations locales (LocalAddress, LocalHost, LocalPort)
les informations distantes (RemoteAddress,RemoteHost, RemotePort).
Donc, mis à part si tu as mis les mêmes valeurs d'adresse et de port sur chacun de tes clients, tu devrais pouvoir les distinguer les uns des autres par ces propriétés.
Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein
cs_askil2000
Messages postés92Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention12 avril 2010 23 juin 2007 à 00:28
Je suis toujours dessus, en effet tu as raison il existe les informations locales et distantes,
mais elles ne me sont d'aucune utilité car j'ai l'adresse du server, et l'adresse des deux clients créé dynamiquement sont les mêmes. se que je cherche à faire ne se trouve pas dans les informations relative aux adresses ip mais bien dans l'information proprement dite. Quand on envois deux informations successivement par une boucle for par exemple
on a :
for I := 1 to 100 do begin
TFunc[I].Sock := TClientSocket.Create(mon form);
TFunc[I].Sock.Name := 'MS' + IntToStr(I);
TFunc[I].Sock.OnConnect := MSConnect;
TFunc[I].Sock.OnRead := MSRead;
TFunc[I].Sock.OnError := MSError;
TFunc[I].Sock.Tag := I;
TFunc[I].Sock.Host := Host;
TFunc[I].Sock.Port := Port;
TFunc[I].Sock.Open;
end;
ensuite on a dans l'evénement OnConnect (soit MSConnect;) :
Socket.SendText(ChaineAvecMaVariable);
et dans le OnRead (soit MSRead;) :
if (J'aiUnMotQuiDitOk) then c'est bon;
les sockets sont bien envoyés dans l'ordre 1 to 100
mais dans la réception il y a un décalage (normal puisque c'est distant)
on reçois donc les réponses dans le désordre.
J'aimerais donc différencier ou trouver un astuce pour dire que c'est ma variable qui est bien traité.
J'espère que c'est plus clair à présent merci ....
Vous n’avez pas trouvé la réponse que vous recherchez ?
sylvunix
Messages postés93Date d'inscriptionmardi 11 avril 2006StatutMembreDernière intervention 4 mars 2009 23 juin 2007 à 09:13
Bonjour,
Si j'ai bien compris, tous les évènements OnRead pointent sur une même méthode. Donc quand tu reçois une information, tu ne sais pas à quel socket elle est liée.
Pourquoi ne ferais-tu pas un programme multithread, un thread étant associé à un socket. La mise en oeuvre ne doit pas être trop compliquée et je pense que cela pourrais répondre à ton problème. A condition toutefois que je l'ai bien compris.
cs_askil2000
Messages postés92Date d'inscriptionlundi 8 mars 2004StatutMembreDernière intervention12 avril 2010 23 juin 2007 à 12:02
Bonjour sylvunix,
Tu as bien cerné mon problème en effet, tous les évènements pointent vers une même "méthode". Le multithread est peut être la solution, je vais reformer mon code afin de voir si il est possible de gérer individuellement les "méthodes".
En tout cas, je ne manquerai pas de confirmer ta réponse si toutefois elle correspond.