# Dotnet > Gnral Dotnet > Rseau >  les Sockets en asynchrone

## overthetop

Bonjour, 

Je programmais en VB6 et je n'avais aucun problme avec les sockets.
Je rcuprais mes donnes avec le DataArrival .
Mais je suis pass en .NET et je galre vraiment.
En Synchrone je n'ai pas de problme mais pour la reception de donnes (comme le dataArrival du WinSock ) je ne sais pas comment faire.
J'ai vu qu'on pouvait utiliser le mode Asynchrone qui permettrait de faire ce DataArrival Mais je seche totalement.

A ma commande : Socket.BeginConnect , ca n'a pas l'air de passer.
Ca a bien l'air d'aller dans le CallBack mais foire la connexion.. et je n'arrive pas a trouver le probleme.



```

```

Donc quand je lance le dbug , il foire au CallBack (apparement) 
Si vous pouvez me donner des conseils.
(C'est pour acceder  un chat et pouvoir rcuperer les infos des gens qui parlent en temps rel. En mode Synchrone , pas de souci , je me connecte , je peux parler , tout fonctionne sauf que je ne rcupere pas les donnes des gens... c'est le gros soucis...)

Merci de votre aide.

----------


## Pol63

le principe en asynchrone:
appeler beginconnect en lui donnant un callback
ne rien faire d'autre
quand le callback est appel, appeler endconnect, puis appeler beginreceive en lui fournissant un callback aussi
dans le callback du beginreceive appeler endreceive pour avoir les octets, puis rappeler dans la foule beginreceive pour pouvoir avoir la prochaine rception de donnes

si tu n'y arrives pas, tu peux tenter de faire un thread par client en utilisant les mthodes synchrones, l l'attente des mthodes synchrones n'est plus drangeant (les mthodes asynchrones ne font que dmarrer un thread qui fera le rappel)

sinon tu peux tester wcf (ou .net remoting si tu n'es pas sur le fx3 ou suprieur)
ca permet d'viter de coder la transmission et la norme de dialogue, en schmatisant le serveur expose des mthodes et les clients en les appelant font que la mthode est excute sur le serveur

----------


## overthetop

Merci pour ta rponse.

Quand je fais mon action :
BeginConnect ca va vers le callback 
au callback ca n'effectue pas correctement le Try et donc va au Catch...
Donc on pourrait dire que la connexion ne s'effectue pas.
Mais Disons que je reprenne mon mode Synchrone qui fonctionne bien.
Il faut que je puisse aussi faire un DataArrival (donc dans un timer?)
Le souci c'est qu'il ne faut pas que le timer me bloque l'appli il faut que je puisse garder la main. Ou alors que je puisse faire une fonction qui est appell qu'a la reception de nouveau paquet (comme le DataArrival) Mais je ne sais pas comment le coder , je suis assez perdu en fait. Je n'ai pas forcment besoin de multiThreads. En Socket sous VB6 je n'en avais pas et ca fonctionnait trs trs bien. 
(je ne connais pas wcf, ni .net remoting et je ne sais pas ce qu'est le fx3 (je pense que tu parles du framework, non ?) 
Google m'a renseigner sur le .net Remoting mais je vois mal si ca pourrait vraiment coller. Je prfererais rester sur les sockets l , Vraiment mon plus gros souci est le fait de ne pas arriver a receptionner des paquets "automatiquement". Si j'ai la solution  ca en gardant toujours la main sur le logiciel pas de prob. 
Mon but est de pouvoir faire un client du type Chat IRC (mais pas pour IRC)
et aussi (et surtout) un Bot (donc il devra etre capable de lire les infos entrantes puis les traiter )
Enfin, et bien, ds que je peux receptionner tout correctement, le reste sera un jeu d'enfant. Mais l vraiment je bloque a fond  ::(:

----------


## Pol63

> au callback ca n'effectue pas correctement le Try et donc va au Catch...


il serait judicieux ne nous dire la ligne qui plante, le message d'erreur, et ventuellement le type d'exception





> Mais Disons que je reprenne mon mode Synchrone qui fonctionne bien.
> Il faut que je puisse aussi faire un DataArrival (donc dans un timer?)
> Le souci c'est qu'il ne faut pas que le timer me bloque l'appli il faut que je puisse garder la main. Ou alors que je puisse faire une fonction qui est appell qu'a la reception de nouveau paquet (comme le DataArrival) Mais je ne sais pas comment le coder , je suis assez perdu en fait. Je n'ai pas forcment besoin de multiThreads. En Socket sous VB6 je n'en avais pas et ca fonctionnait trs trs bien. 
> (je ne connais pas wcf, ni .net remoting et je ne sais pas ce qu'est le fx3 (je pense que tu parles du framework, non ?)


par fx3 j'entend framework 3 oui
wcf et .net remoting ne sont utile que si tu gres les 2 cts de la connexion, ce qui ne semble pas tre ton cas

les sockets en vb.net sont de plus bas niveau que ceux de vb6, il y a plus de choses  grer

avec les mthodes synchrones, l'excution du code est suspendu jusqu' "l'vnement" qui dbloque, pour connect ce n'est pas gnralement un soucis car si le serveur rpond vite ca ne bloque, mais si le serveur ne rpond pas ou sur la mthode receive ca va bloquer, et donc bloquer l'interface
il faut alors un autre thread, car le thread principal s'occupe de l'interface, et donc bloquer sur un autre thread n'est pas un soucis
si tu fais une classe pour grer le socket, tu peux faire un evnement sur cette classe, dmarrer le thread sur l'instanciation de la classe, et lever l'vnement en cas de rception de donnes
ton interface doit tre abonne  cet vnement et ca te feras comme sous vb6 le datareceive (il faudra revenir sur le thread principal pour modifier l'interface, voir dlgus / uncontrol.invokerequired / uncontrol.invoke)

----------

