Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# Serwer obsługujący wielu klientów (UDP)

30 Lis 2017 19:46 378 9
  • #1 30 Lis 2017 19:46
    3051734
    Użytkownik usunął konto  
  • #3 30 Lis 2017 20:12
    3051734
    Użytkownik usunął konto  
  • #4 30 Lis 2017 20:13
    czareqpl
    Poziom 28  
  • #5 01 Gru 2017 07:42
    JacekCz
    Poziom 35  

    rav9708 napisał:
    Witam!

    Muszę wykonać pewien projekt polegający na napisaniu programów sieciowych w C# (chociaż C++ też może być).


    Jeśli ktoś chce cię przymusić do czegokolwiek, np pisania programów, to podpada pod prokuratora.
    Żyjemy w wolnym kraju.

    rav9708 napisał:

    Ponadto nie znam wszystkich funkcji z C# które ułatwiłyby rozwiązanie zadania.


    To bardzo dobrze, bo w C# nie ma funkcji.

    0
  • #6 01 Gru 2017 10:53
    3051734
    Użytkownik usunął konto  
  • #7 01 Gru 2017 14:36
    1487300
    Użytkownik usunął konto  
  • #8 01 Gru 2017 14:47
    3051734
    Użytkownik usunął konto  
  • #9 01 Gru 2017 21:19
    1487300
    Użytkownik usunął konto  
  • Pomocny post
    #10 01 Gru 2017 23:02
    wiesniak
    Poziom 31  

    Tak czytam tę dyskusję i zastanawiam się, ilu z Was implementowało sensownie działającą aplikację klient-serwer. Ja się kiedyś z tym musiałem zmierzyć (używając TCP) i większość znalezionych demek oraz przykładzików była o kant d* rozbić, bo przedstawiały one wszystko w najprostszej formie.

    rav9708 -> Jeśli to ma mieć ręce i nogi, to przede wszystkim podejście asynchroniczne. Będziesz miał architekturę klient-serwer, ale musisz pamiętać, że obie strony będą jednocześnie klientami i serwerami. Różnica będzie tylko taka, że serwer musi pamiętać "podłączonych" (wiem udp nie trzyma połączenia) klientów i pewnie będzie miał częściowo inny zestaw obsługiwanych poleceń.
    Myślę, że na start dobra będzie aplikacja chatu na udp: A Chat Application Using Asynchronous UDP sockets.
    Do tego pewnie można by było dorobić jakąś pulę wątków obsługujących komunikację po stronie serwera, żeby nie blokował wykonania. Trzeba by było potestować to demo, jak zachowuje się przy wielu komunikatach jednocześnie - czy się gdzieś na odbieraniu nie zapycha, czy dłuższe pakiety danych przychodzą dobrze, a nie w kawałkach. W mojej apce na tcp dłuższe dane przychodziły mi sfragmentowane. Ogarnąłem to zakładając, że pierwsze 4 bajty to długość danych i zawsze ładowałem dane do bufora - jeśli w buforze było tyle danych ile wynikało z tych czterech bajtów, to wiedziałem, ze przyszedł mi cały komunikat od danego klienta albo z serwera. Ten chat wykorzystuje sockety w trybie udp - może da się to przerobić na użycie klasy UdpClient - będzie ładniej i może troszkę prościej.

    1