Ich versuche, konzeptionell durch ein Modell für eine Client-Server-Socket-Anwendung zu arbeiten Ich schreibe in C# (Client und Server). Mein Server muss viele Clients gleichzeitig behandeln, vorzugsweise mehrere Anfragen von einem Client gleichzeitig. Ich habe einen Container für meine Kommunikation ausgearbeitet, wo ich am Anfang jeder Nachricht einen Header fester Länge senden werde, der (unter anderem) die Länge der Nachricht enthalten wird. Ich habe etwas Erfahrung mit Socket-Programmierung in C#, so dass ich Asynchrone Sockets verwenden kann.C# Client-Server-Protokoll/Modell Frage
Die Hauptsache, mit der ich konzeptionell Probleme habe, ist, dass ich sowohl den Client als auch den Server brauche, um Nachrichten jederzeit empfangen zu können. Der Client baut eine Verbindung auf und bleibt "angemeldet" (wie ein IM-Client) und muss zu beliebigen Zeiten Daten empfangen und zu beliebigen Zeiten Anfragen stellen. Ich wollte auch als Teil meines Protokolls eine Antwort auf jede Anfrage erhalten (sei es vom Server zum Client oder vom Client zum Server).
Ich würde gerne in der Lage sein, einen einzigen Sockel zu verwenden, wenn möglich. Ich glaube, ich könnte dies mit zwei Sockets machen, einen für Server-> Client-Anfragen und einen für Client-> Server-Anfragen, aber ich möchte nicht die zusätzlichen Komplikationen beim Umgang mit zwei Ports/Verbindungen. Mit einem einzigen Socket bin ich jedoch nicht sicher, wie ich Sendeanforderungen verwalten und Antworten erhalten soll, wenn sie verschachtelt werden könnten.
Ich kann keine Beispiele für einen ähnlichen Server oder Client in meiner Suche finden. Danke an jeden der etwas anbietet.
Ja. Aber nehmen wir an, der Server fordert etwas vom Client an, das eine Weile dauert. Währenddessen fragt der Client den Server nach etwas. Wie kann ich in meinem BeginReceive des Servers wissen, dass diese eingehenden Daten die Anfrage vom Client oder die Antwort auf die Anfrage des Servers sind? Daran kämpfe ich. Ich habe die Grundlagen der asynchronen Sockelung. Vielen Dank. – Jarrod
Sorry, all das Gerede über Sockets ließ mich denken, dass dein Problem auf diesem Level war; Wie ist das Update? –
Tut mir leid, ich hatte eine schwierige Zeit, meine Frage zu stellen ... aber genau das ist genau die Art von Sache, die ich versucht habe. Ich hatte überlegt, Anfrage-IDs und das Wörterbuch zu verwenden, aber fragte mich, wie ich eine Methode implementieren konnte, um eine Anforderung zu stellen und zu blockieren, bis das Ergebnis kam und es zurückgab, ohne ein ResetEvent in meinem Anfrage-Statusobjekt zu verwenden. Das wäre schlecht das für jede Anfrage nicht zu erstellen? Vielen Dank. – Jarrod