Savoir quand winsock a envoyé des données

harddisk Messages postés 54 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 13 mai 2007 - 5 juil. 2002 à 19:50
harddisk Messages postés 54 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 13 mai 2007 - 8 juil. 2002 à 20:20
Une question qui peut sembler débile mais ca fait 5 jours que je trouve pas la solution:
Je fais un genre de chat avec un controle Serveur(100)
je veut qu'il envoie des données à tous ses clients.JE fais donc celà:

for x = 1 to 100
donnees = "[MSG]BlaBla"
serveur(x).senddata donnees
next

Devinez ce qui se passe: seul le client qui est connecté au serveur(100) recoit la réponse
pas les autres. je transforme ce code et ca devient:

for x = 1 to 100
donnees = "[MSG]BlaBla"
serveur(x).senddata donnees
msgox"patientez 0.2 ms"
next

et là Ô magie celà marche. Mais le problème c ke c très lent.
M^me si je met une boucle qui attend 2 ms a la place de la msgbox
celà prend 2 * 100 ms = 2sec ce qui est énorme.De plus si la donnée n'a pas été envoyé en 2 ms
ca marche po évidemment. La sub serveur_sendcomplete(index as.....) n'est pas une fonction(c logique)
donc imossible de faire if serveur_sendcomplete(x) =true then next

donc voila la VRAIE QUESTION: Que faire pour savoir si les données d'un ctrl winsock on été envoyé?
(il faudrait éviter une solution du type : le client envoi "bien recu"->ca prendrait trop de
temps et si un client en début de liste à une connexion foireuse tout le monde attend)
merci au sauveur qui répondra

3 réponses

Makabey Messages postés 152 Date d'inscription mercredi 27 juin 2001 Statut Membre Dernière intervention 11 juillet 2002 1
5 juil. 2002 à 20:06
Je crois avoir déjà fait un truc simple comme ceci:

(dans un module ou dans la partie commune de ta form):
Public boSentFlag as Boolean

(fonction)
for x = 1 to 100
boSentFlag=False
donnees = "[MSG]BlaBla"
serveur(x).senddata donnees
do while not boSentFlag
next

Sub Serveur_SendComplete(...)
boSentFlag=True
End Sub

Je crois que ça vas fonctionner.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 juil. 2002 à 14:04
Avec une boucle pareil tu risque pas d'aller tres loin lol ... T'incremente jamais la variable x ... en gros tu boucle indefiniment ce qui doit faire foirer ton prog...
Apres Next rajoute x soit Next x ou alors en fin de boucle met x = x +1
Puis pour eviter ce probleme tu peux faire comme Makabey te la dis ... Sinon utilise des Doevents... Ca permet d'attendre que l'action precedente soit terminer avant de reboucler.

Voili voilou... J'espere que ca va t'aider un peu plus...
Si t'as des questions n'hesites pas.
A++ et bonne prog

DeAtH_-_CrAsH
0
harddisk Messages postés 54 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 13 mai 2007
8 juil. 2002 à 20:20
merci makabey et deathCrash. J'avais aussi essayé doevents ca avait pa donner grand chose. JE vais déjà essyer next X et si ca foire tjrs je vais faire la méthode makabey
0
Rejoignez-nous