Question

Quelqu'un pourrait-il m'indiquer la bonne direction pour apprendre à faire du réseautage dans C # / .net 3.5? Des exemples de code et des explications sont les bienvenus. En gros, je cherche comment créer des modèles serveur / client asynchrones / multithreadés.

Je suis assez à l'aise avec les bases pour réaliser cela en C ++ avec WinSock mais bien que toutes mes recherches ne semblent pas saisir ce concept en C #.

Merci pour toute aide que vous pouvez fournir:)

Était-ce utile?

La solution

Si WCF répond à vos besoins, cela vaut la peine d’être examiné. Il existe ZeroC et d'autres bibliothèques de niveaux supérieurs. Sinon, il existe plusieurs façons de travailler plus près du niveau du socket si c'est ce dont vous avez besoin.

TcpClient / UdpClient

Ils fournissent une enveloppe relativement mince autour des sockets sous-jacents. Il fournit essentiellement un flux sur le socket. Vous pouvez utiliser les méthodes asynchrones sur NetworkStream (BeginRead, etc.). Je n'aime pas celui-ci car le wrapper n'en fournit pas beaucoup et cela a tendance à être un peu plus délicat que d'utiliser directement le socket.

Socket - Sélectionnez

Ceci fournit la technique classique de Select pour le multiplexage d’entrées multiples sur un seul thread. Non recommandé plus longtemps.

Socket - Style APM

Le modèle de programmation asynchrone (AKA IAsyncResult, style de début / fin) pour les sockets est la technique principale permettant d’utiliser les sockets de manière asynchrone. Et il y a plusieurs variantes. Pour l’essentiel, vous appelez une méthode asynchrone (par exemple, BeginReceive) et effectuez l’une des opérations suivantes:

  1. Interrogez l'IAsyncResult renvoyé (à peine utilisé).
  2. Utilisez WaitHandle de IAsyncResult pour attendre la fin de la méthode.
  3. Transmettez à la méthode BeginXXX une méthode de rappel qui sera exécutée à la fin de la méthode.

Le meilleur moyen est le n ° 3, car c’est le plus pratique. En cas de doute, utilisez cette méthode.

Quelques liens:

Sockets haute performance .NET 3.5

.NET 3.5 a introduit un nouveau modèle pour les sockets asynchrones qui utilise des événements. Il utilise la commande " simplifié " modèle async (par exemple, Socket.SendAsync). Au lieu de donner un rappel, vous vous abonnez à un événement pour l'achèvement et à la place d'un IAsyncResult, vous obtenez SocketAsyncEventArgs. L'idée est que vous pouvez réutiliser SocketAsyncEventArgs et pré-allouer de la mémoire pour socket IO. Dans les scénarios à hautes performances, cela peut être beaucoup plus efficace que d'utiliser le style APM. De plus, si vous pré-allouez la mémoire, vous obtenez une empreinte mémoire stable, un ramassage des ordures réduit, des trous de mémoire dus à l’épinglage, etc. Notez que cette préoccupation ne devrait être prise en compte que dans les scénarios les plus performants.

Résumé

Dans la plupart des cas, utilisez la méthode de rappel du style APM, sauf si vous préférez le style de la méthode SocketAsyncEventArgs / Async. Si vous avez utilisé CompletionPorts dans WinSock, sachez que ces deux méthodes utilisent CompletionPorts sous le capot.

Autres conseils

Dans le monde .NET 3.5, vous devez absolument apprendre à Windows Communication Foundation - Framework .NET pour la mise en réseau.

Lien utile:

Opérations synchrones et asynchrones (dans WCF)

Vous pouvez trouver des informations WCF utiles sur les messages de navigation de StackOverflow marqués avec le tag WCF

Cela dépend de ce sur quoi vous voulez vous concentrer.

Si vous souhaitez vous concentrer sur les fonctionnalités et laisser la plomberie au framework, commencez par Windows Communication Foundation.

Si vous souhaitez créer votre propre tuyauterie, utilisez la classe System.Net.Sockets.Socket .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top