Ich bin derzeit neu in C # und muss eine einfache Server-Client-Architektur verstehen!
Ich versuche gerade, ein einfaches Server / Client-Programm zu schreiben, bei dem ein Client im Grunde eine Variable an einen Server senden kann und der Server sie an einen anderen Client senden kann. Das Problem ist, dass ich wirklich blind bin, da ich immer noch sehr neu in C # bin, obwohl ich etwas Erfahrung mit Java habe (aber immer noch nicht mit Netzwerken).
Meine Frage ist:
Dies ist für ein Online-Spiel gedacht. Ein Kunde würfelt und der Server muss allen anderen Kunden zeigen, dass dies der Wert ist, den der erste Kunde gewürfelt hat.
Jede Hilfe würde sehr geschätzt werden!
Beantworten Sie alle Ihre Fragen: MSDN - Netzwerkprogrammierung (.NET 4)
Da Sie TCP planen (weil Sie einen Status haben wollen), müssen Sie eine Strategie entwickeln. Sie erhalten viele Informationen über das Herstellen einer Verbindung und das Verschieben von Daten hin und her. Google wird Ihnen mehr geben, als Sie verarbeiten können. Ohne die ganze Arbeit zu tun, hier sind ein paar Schritte, um Sie zu orientieren.
1) Verbindungsregistrierung - Wenn ein Client online geht und mit dem Server kommunizieren will, muss er zuerst sagen: "Hey, ich bin hier und möchte ein paar Würfel werfen." Dieser anfängliche Handshake könnte eine Verbindungs-ID sein, die für einen Herzschlag und / oder Transaktionen verwendet wird. Der Server wird dies verwenden, um Daten und den entsprechenden Thread zu identifizieren, wenn er geöffnet ist.
2) Herzschlag - Nachdem sich der Client beim Server registriert hat, ist der Client dafür verantwortlich, einen Herzschlag zu liefern, der sagt, dass er immer noch da ist und immer noch plant, mit der Arbeit fortzufahren. In der Regel ist alle 3 - 10 Sekunden gut.
3) Entwickle das Request / Response-Protokoll - Für "jeden Befehl" wird es einen formellen Prozess geben. Dieser formale Prozess enthält die Verbindungs-ID, aber auch eine Anforderungs-ID. Der Client akzeptiert nur dann eine Antwort, wenn er die entsprechende Anforderungs-ID erhält. Darüber hinaus erfordert jede Anfrage eine erfolgreiche oder fehlgeschlagene Antwort, um festzustellen, ob sie der API entspricht oder nicht. Innerhalb der Anfrage wird der Befehl oder die Aktion ausgeführt. Einige Leute verwenden int, um eine Befehls-ID zu versenden, und verwenden dann einen Schalter auf der ID, um eine Einstiegspunkt-Methode aufzurufen (cmd id = 1 ist connect (), cmd id = 2 ist rolldice (), usw.). Sie können zusätzliche Nutzdaten hinzufügen, die das Ergebnis des Befehls identifizieren.
Kurz gesagt, 1 ist der Handshake, 2 ist der Keep-Alive und 3 gibt Daten hin und her.
Nun, ob ich Socket oder WCF verwende, würde ich empfehlen, ein grundlegendes Verständnis der TcpClient-Programmierung zu haben, dann mit WCF laufen zu lassen. Sie werden erstaunt sein, wie einfach Socket-Programmierung ist, aber der Overhead ist ein Killer. Nichts, von dem man sich einschüchtern lassen könnte. Es ist eine Menge Arbeit, um Anrufe, Threads und nicht zu vergessen die Sicherheit zu koordinieren. Die WCF hingegen spart einiges davon.
Ich würde diese Frage überprüfen ...
Wie Socket-basierten Client mit verwenden WCF (net.tcp) Dienst?
1) Die Anzahl der Dateien hängt von Ihrer speziellen Implementierung ab. Sie können diese Architektur einfach als 1 Klasse für den Server und 1 Klasse für den Client erstellen (Sie können mehr als eine Klasse in einer Datei haben). Abhängig von der Komplexität und der Auswahl, die Sie während des Entwurfs treffen, können Sie viele oder nur wenige Dateien haben.
2) Ein gutes Tutorial für einen einfachen TCP-Server / Client finden Sie hier
>3) Ein TCP-Server ist ein Prozess, der auf eine Verbindung von einem TCP-Client wartet. TCP steht für Transmission Control Protocol. Von Wikipedia : TCP bietet eine zuverlässige, geordnete Zustellung eines Bytestroms von einem Programm auf einem Computer zu einem anderen Programm auf einem anderen Computer .
Tags und Links c#