2011-10-31 10 views
8

Jestem obecnie nowy w C# i muszę zrozumieć prostą architekturę serwer-klient!Proste programowanie sieciowe w języku C# dla początkujących?

Obecnie próbuję napisać prosty program serwer/klient, w którym zasadniczo klient może wysłać zmienną do serwera, a serwer może wysłać ją do innego klienta. Problem polega na tym, że jestem naprawdę ślepy na to, ponieważ wciąż jestem bardzo nowy w C#, chociaż mam pewne doświadczenie z Javą (ale nadal nie w sieci).

Moje pytanie brzmi:

  1. Ile plików będę musiał napisać?
  2. Czy ktoś może być na tyle miły, aby zapewnić mi framework lub przykład takiego programu?
  3. Co to jest serwer TCP?

Jest przeznaczony do gry online. Jeden klient rzuci kością, a serwer musi pokazać wszystkim innym klientom, że jest to wartość, którą obrócił pierwszy klient.

Każda pomoc będzie bardzo ceniona!

+4

Podpowiedź: Nie ufaj klientów. Zwykle klient powinien poprosić serwer o rzucenie kostką, a serwer wyśle ​​walcowaną wartość do wszystkich klientów. –

+1

Proponuję zajrzeć do WCF. Doskonałą książką dla początkujących w WCF jest [Krok po kroku WCF] (http://shop.oreilly.com/product/0790145302403.do). Możesz przeczytać z wyprzedzeniem przykład klienta Chat, jeśli chcesz poznać szczegóły na temat tego, co próbujesz zrobić. Wcf uprości także proces autoryzacji. – Garvin

Odpowiedz

3

1) liczba plików zależy od konkretnej implementacji. Możesz stworzyć tę architekturę jako 1 klasę dla serwera i 1 klasę dla klienta (możesz mieć więcej niż jedną klasę w pliku). W zależności od złożoności i wyborów dokonanych podczas projektowania można mieć wiele plików lub tylko kilka.

2) Dobry poradnik dla prostego serwera TCP/klienta można znaleźć here

3) serwer TCP jest to proces, który czeka na połączenie z klientem TCP. TCP oznacza protokół kontroli transmisji. Od Wikipedia: TCP zapewnia niezawodne, uporządkowane dostarczanie strumienia bajtów z programu na jednym komputerze do innego programu na innym komputerze.

4

Ponieważ planujesz TCP (ponieważ chcesz stan), musisz opracować strategię. Dostaniesz mnóstwo informacji o nawiązywaniu połączenia i przenoszeniu pewnych danych tam iz powrotem. Google da Ci więcej niż możesz obsłużyć. Bez wykonywania całej pracy, oto kilka kroków, aby zorientować się.

1) Rejestracja połączenia - Kiedy klient przychodzi online i chce się komunikować z serwerem, najpierw musi powiedzieć "Hej, jestem tutaj i chcę odgrywać rolę kostki". Ten początkowy handshake może być identyfikatorem połączenia używanym do bicia serca i/lub transakcji. Serwer użyje tego do identyfikacji danych i odpowiedniego wątku, jeśli jest otwarty.

2) Heart Beat - Teraz, gdy klient zarejestrował się na serwerze, klient odpowiada za bicie serca, mówiąc, że wciąż tam jest i nadal planuje kontynuować pracę. Zazwyczaj co 3 - 10 sekund jest dobre.

3) Opracuj protokół żądania/odpowiedzi - w przypadku "każdego polecenia" odbędzie się formalny proces. Ten formalny proces będzie zawierał identyfikator połączenia, ale także identyfikator żądania. Klient nie zaakceptuje odpowiedzi, dopóki nie otrzyma odpowiedniego identyfikatora żądania. Co więcej, każde żądanie będzie wymagać odpowiedzi powodzenia lub niepowodzenia w celu określenia, czy jest zgodne z interfejsem API, czy też nie. W ramach żądania będzie polecenie lub akcja do wykonania.Niektóre osoby używają int do wysyłania identyfikatora polecenia, a następnie użyj przełącznika na id, aby wywołać metodę punktu wejścia (cmd id = 1 to connect(), cmd id = 2 to rolldice(), itp.). Możesz dołączyć dodatkowy ładunek, który identyfikuje wynik z polecenia.

Krótko mówiąc, 1 to uścisk dłoni, 2 to podtrzymanie, a 3 przekazanie danych w tę iz powrotem.

Teraz, czy użyć gniazda lub WCF, polecam mieć podstawową wiedzę na temat programowania TcpClient, a następnie uruchomić z WCF. Będziesz zaskoczony, jak proste jest programowanie w gniazdach, ale koszty ogólne są mordercze. Nic nie można zastraszyć. Dużo pracy wymaga koordynowania połączeń, wątków i nie wspominając o bezpieczeństwie. Z drugiej strony WCF usuwa część tego kosztu.

chciałbym sprawdzić to pytanie ...

How to use socket based client with WCF (net.tcp) service?

Powiązane problemy