Frage

Könnte mich jemand bitte in die richtige Richtung zeigen, um zu lernen, wie man sich in C#/. Net 3.5 nenne? Code -Beispiele und Erklärungen sind willkommen. Grundsätzlich suche ich, wie man asynchrone/multitHhread -Server-/Client -Modelle macht.

Ich fühle mich ziemlich wohl mit den Grundlagen, wie man dies in C ++ mit Winsock erreicht kann, aber obwohl alle meine Forschungen dieses Konzept in C#nicht zu erfassen scheinen.

Vielen Dank für jede Unterstützung, die Sie leisten können :)

War es hilfreich?

Lösung

Wenn WCF Ihre Bedürfnisse entspricht, lohnt es sich, es zu betrachten. Zeroc und andere alternative Bibliotheken auf höherer Ebene existieren. Andernfalls gibt es verschiedene Möglichkeiten, um näher an der Socket -Ebene zu arbeiten, wenn Sie das benötigen.

Tcpclient/udpclient

Diese sorgen für eine relativ dünne Wrapper um die darunter liegenden Steckdosen. Es bietet im Wesentlichen einen Stream über der Steckdose. Sie können die asynchronisierten Methoden im Netzwerkstream (beginread usw.) verwenden. Ich mag diesen nicht, da der Wrapper nicht so viel bietet und es tendenziell etwas unangenehmer ist als die direkte Verwendung der Steckdose.

Socket - SELECT

Dies bietet die klassische Auswahltechnik zum Multiplexing mehrerer Socket -IO auf einem einzelnen Faden. Nicht mehr empfohlen.

Steckdose - APM -Stil

Das asynchrone Programmiermodell (auch bekannt als IaSyncresult, Beginn/End -Stil) für Sockets ist die Haupttechnik für die Verwendung von Sockets asynchron. Und es gibt mehrere Varianten. Im Wesentlichen nennen Sie eine asynchronisierte Methode (z. B. beginreceive) und machen eine der folgenden:

  1. Umfrage zur Fertigstellung des zurückgegebenen IAsyncresult (kaum verwendet).
  2. Verwenden Sie den WaitHandle vom iAsyncresult, um auf die Methode zu warten.
  3. Geben Sie die Beginnxxx -Methode über eine Rückrufmethode weiter, die nach Abschluss der Methode ausgeführt wird.

Der beste Weg ist #3, da es normalerweise der praktischste ist. Verwenden Sie diese Methode, wenn Sie Zweifel haben.

Einige Links:

.NET 3.5 Hochleistungsstecke

.NET 3.5 stellte ein neues Modell für asynchrische Sockets vor, das Ereignisse verwendet. Es verwendet das "vereinfachte" Async -Modell (z. B. Socket.Sendasync). Anstatt einen Rückruf abzugeben, abonnieren Sie eine Veranstaltung für die Fertigstellung und anstelle eines iAsyncresultes erhalten Sie SocketasynceEventArgs. Die Idee ist, dass Sie die SocketasynceEventargs und den Speicher für Socket IO wiederverwenden können. In Hochleistungsszenarien kann dies viel effizienter sein als die Verwendung des APM -Stils. Wenn Sie den Speicher vorbereiten, erhalten Sie außerdem einen stabilen Speicherpfunddruck, eine reduzierte Müllsammlung, Speicherlöcher vom Pinten usw. Beachten Sie, dass sich die Sorgen darüber nur in den höchsten Leistungsszenarien beachten sollten.

Zusammenfassung

Verwenden Sie für die meisten Fälle die Callback -Methode des APM -Stils, es sei denn, Sie bevorzugen den Stil der SocketasynceEventArgs / Async -Methode. Wenn Sie CompletionPorts in Winsock verwendet haben, sollten Sie wissen, dass beide Methoden Completionports unter der Motorhaube verwenden.

Andere Tipps

In .NET 3.5 World sollten Sie definitiv lernen Windows Communication Foundation - .NET Framework für Networking.

Nützlicher Link:

Synchrone und asynchrone Operationen (in WCF)

Sie finden nützliche WCF -Informationen zu Stackoverflow -Browsing -Posts Tagged mit WCF Schild

Es hängt davon ab, worauf Sie sich konzentrieren möchten.

Wenn Sie sich auf die Funktionalität konzentrieren und die Installation dem Framework überlassen möchten, beginnen Sie mit der Windows Communication Foundation.

Wenn Sie Ihre eigene Installation bauen möchten, dann verwenden Sie System.Net.Sockets.Socket Klasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top