2009-08-30 6 views
1

Lors de la première utilisation lors de l'utilisation de méthodes asynchrones au niveau socket, il ne devrait pas y avoir de problèmes d'envoi et de réception de données du flux réseau associé, ou directement sur le socket. Mais, vous le savez probablement déjà, il y en a.C# socket TCP, lecture et écriture asynchrones à la "même" heure (.NET CF), comment?

Le problème est particulièrement mis en évidence sur la plate-forme Windows Mobile et la Compact Framework.

J'utilise méthodes asynchrones, BeginReceive et la fonction de rappel qui exécute les extrémités d'une lecture asynchrone en attente pour les données reçues (EndReceive) du async. résultat.

Comme j'ai besoin de recevoir constamment des données du socket, il y a une boucle qui attend les données. Les problèmes commencent quand je veux envoyer des données. A cet effet, avant d'envoyer des données via le socket, je suis en train de "forcer" les fins de lecture asynchrone avec EndReceive. Il y a un grand délai sur cela (parfois vous ne pouvez pas attendre pour cela timeout). Timeout est trop long, et je dois envoyer immédiatement les données. Comment? Je ne veux pas fermer la prise et reconnecter.

J'utilise la méthode synchrone Send pour envoyer des données (bien que les résultats soient les mêmes avec les méthodes asynchrones BeginSend/EndSend). Lorsque l'envoi est terminé, je commence à recevoir des données à nouveau.

Ressources que je connais:

P.S.:I a essayé d'envoyer les données sans mettre fin à asynchrone reçoivent, mais ensuite je me suis SocketException: Une opération de blocage est actuellement en cours d'exécution (ErrorCode: 10036).

Merci d'avance! J'espère que je ne suis pas seul dans ce « un petit problème » .. :)

Répondre

1

Avez-vous envisagé d'utiliser le sondage (ou sélectionner pour plusieurs sockets) méthode statique au lieu de BeginReceive pour vérifier s'il y a données pour lire? À mon avis, cela vous cause le problème.

+0

Oui, en effet, en utilisant la méthode Poll je peux toujours lire et écrire à travers socket sans bloquer, les erreurs, les exceptions (jusqu'à présent) etc Merci beaucoup, beaucoup! J'ai perdu 2 jours à chercher cette réponse. :) Référence: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.poll.aspx – Beaver

+0

@Beaver pouvez-vous expliquer où vous avez utilisé l'interrogation dans votre code? (ou Yakeen où vous suggérer de mettre le code) lors de l'utilisation de sockets async? –

Questions connexes