2016-08-15 3 views
0

Ich versuche, diesen Server zu bauen, der Verbindungen auf einem Socket empfängt, den Benutzer authentifiziert und dann den Socket an die Klasse des Benutzers "sendet", der zu ihm passt (mit den in der Authentifizierung angegebenen Informationen) ein Thread-Pool (von mehreren Geräten dieses Clients) in derselben Klasse, der verarbeitet werden soll (Austausch von Informationen, Aktualisierung von Dingen an anderer Stelle usw.).C# Moving Socket zu einem anderen Socket in einer anderen Klasse?

Ich muss es in einen anderen Socket in einer anderen Klasse verschieben, dann werden die Threads für diese Klasse öffnen wird es verarbeiten. Wenn ich die Verbindung akzeptiere, um sie zu authentifizieren, dann hat dieser Socket diese Verbindung, vorher konnte ich nicht gewusst haben, dass ich ihn mit dem spezifischen Socket in der spezifischen Klasse akzeptiere, weil ich nicht wusste woher (wer) er kam und Jetzt habe ich einen Thread, mit dem ich nichts anfangen kann, da ich dieser Klasse nicht sagen kann, diesen Thread zu verwenden, denn wenn ich es in einem Thread dieser Klasse verwende, wird der nächste Socket, den ich verwende, um die Verbindung zu akzeptieren sei derjenige, der von derselben Klasse besetzt ist. Ich könnte ein riesiges Array verwenden, um akzeptierte Sockets zu speichern und den Klassen mitzuteilen, dass diese Socket-Nummer ihnen gehört, aber das wäre nicht nur begrenzt, sondern auch eine Menge loser Sockets, die funktionieren würden, aber weder optimiert noch organisiert wären.

Wer weiß also, wie man das macht, oder sollte ich einen anderen Ansatz wählen? Vielen Dank.

+0

Ich bin verwirrt über das, was Sie schreiben, aber normalerweise tun Sie das: Verwenden Sie einen 'TcpListener' und akzeptieren Sie asynchrone Clients. Wenn ein neuer Client eine Verbindung herstellt, erstellen Sie einen neuen Thread, der den akzeptierten Client-Socket verarbeitet und beginnt, für weitere Clients asynchron zu warten. Der hörende Sockel wird dadurch nicht blockiert. Ein sehr einfaches Beispiel finden Sie hier: https://msdn.microsoft.com/en-us/library/fx6588te(v=vs.110).aspx –

Antwort

1

Ich verstehe jetzt meine Frage wurde überhaupt nicht benötigt, für jeden in meiner Situation können Sie gehen lesen und verstehen this Beispiel.

Ich habe jetzt gelernt, dass ich alle und Dokumentation vor dem Posten hier lernen sollte, ich hatte dieses Beispiel vor und meine Faulheit verkrüppelt mich zeitlich.

Wenn Sie jemals in einer Situation sind, in der Sie etwas wegen Faulheit nicht tun wollen, tun Sie es, es wird Sie belohnen. Danke an Thorsten Dittmar für mich da hinten zu zeigen.

Einen schönen Tag noch.

Verwandte Themen