c # sockets, die mehrere Clients verwalten

8

Ich habe den folgenden Code, den ich als meinen Server implementieren möchte. Wie ich es verstehe, ist es asynchron. und sollte Verbindungen von mehreren Clients zulassen ...

%Vor%

Ich habe eine Test-App, die Anfragen einfach an meinen Server sendet. Wie Sie im Code sehen können, antwortet der Server nur mit seinem Datum / Uhrzeit. Die Test-App sendet sage und schreibe 20 Anfragen, die einfach Teststrings sind. Für jede dieser Anfragen öffnet es einen Socket, sendet die Daten an meinen Server und schließt dann den Socket wieder.

Dies funktioniert problemlos, wenn eine Testanwendung ausgeführt wird. Wenn ich jedoch zwei Test-Apps öffne, kann die zweite keine Verbindung zum Server herstellen. Ich dachte, weil ich die Anfrage async behandle. Und weil meine Test-App den Socket vor jedem Aufruf öffnet, kann ich Anfragen von mehreren Clients bearbeiten?

    
Remotec 21.04.2011, 10:08
quelle

2 Antworten

18

Bearbeiten

Wenn Sie & gt; =. Net4.5 verwenden, ist es besser, die neuen Netzwerkmethoden zu verwenden, die dann die Übernahme von async und await zulassen. Daher könnte es besser sein, dem Beispiel zu folgen, das ich in dieser Beitrag als Ausgangspunkt.

Original Beitrag

Der folgende Code demonstriert, wie mehrere Clients asynchron akzeptiert werden, ohne einen neuen Thread pro Verbindung zu deaktivieren.

%Vor%

Sie können dieses Muster für die meisten asynchronen Operationen verwenden.

    
spender 21.04.2011, 10:33
quelle
1

Wie Sie es getan haben, gibt es keinen Vorteil im Vergleich zur Verwendung von AcceptTcpClient . Einfach eine Schleife erstellen und einen neuen Thread für jede akzeptierte Verbindung erstellen:

%Vor%

Eine goldene Regel bei der Verwendung von asynchronen Methoden besteht darin, NICHT die Operation zu blockieren. Das Blockieren würde den Zweck der Verwendung von asynchronen Ops zunichte machen.

%Vor%     
jgauffin 21.04.2011 10:33
quelle

Tags und Links