Problème de Sen_Data Winsock

tchem Messages postés 14 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 19 février 2008 - 8 févr. 2008 à 21:11
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 11 févr. 2008 à 11:55
Voici mon problème :
- J'ai 50 Connections sur WinSock_A(index) (donc 100 winsock d'ouvert) qui arrive quasiement en meme temps, chacun m'envoi 50 caractères, le tout se reproduit toutes les 1 secondes !
Je range les trames arrivant dans une base de données SQL.

Jusque là tout se passe très bien.
- J'ai un WinSock_espion, qui est chargé d'envoyer toutes les trames recue des Winsock_A vers un autre PC (par un winsock.send_data)
C'est là que j'ai un problème, aucune trame n'arrive de l'autre coté. Après quelques minutes, toutes les trame envoyé par winsoc_espion arrive toutes dans le meme paquet !

Element de réponse :

- Si j'insère un Doevents apres les winsock_send_data s (avec len(s) = 50 octets), chaque morceau part correctement !
- Si j'enlève le Doevents, et que je mets un Breakpoint apres le Send_data (donc après le 1er) rien ne s'envoi.
- Si j'enlève le Breakpoint et le Doevents, donc rien ne s'envoi, par contre si je fait un "Pause" dans le debug puis je refais "run", toutes les données partent concaténé....

Que puis-je faire pour régler le problème ??

PS : je ne peux pas faire de Doevents (réponse 1) car avec plusieurs Winsock_espion, je fini par avoir un dépassement de pile.

Merci pour votre aide !

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 févr. 2008 à 01:33
Salut
"je ne peux pas faire de DoEvents" : Il faudra pourtant bien laisser le temps au PC de s'occuper de transmettre les données et gérer les accès à ta base de données !
Alors peut-être pas un DoEvents, mais il faudra, à un moment donné, rendre la main. Regarde voir du côté des Wait.
En VB6, je t'aurais dit d'utiliser l'API Sleep, mais en vb.Net, je ne saurais t'aiguiller.

Dépassement de pile ? pourquoi ?
Je ne pense pas que ce soit la saturation des buffers de réception qui provoquent ça, mais l'entassement d'appels récursifs.
Revois la structure de tes boucles, il y a surement un problème.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
11 févr. 2008 à 11:55
Bonjour

En .NET, évite les Winwock (OCX), mais préfère les classes :
System.Net.Socket.TcpClient
System.Net.Socket.TcpListener

Elles sont plus adaptées à ton travail, tu peux les utiliser dans des threads et en plus elles se chargent de l'envoie même si tu ne met pas de Doevents.

Pour ton espion, je te conseil de faire une file d'éléments à envoyer (System.Collections.Generic.Queue(Of ...)).

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Rejoignez-nous