Problem z portami C#


(northwest) #1

Witam,

mam do zrobienia projekt który będzie działał na zasadzie serwera i klienta.

Serwer będzie musiał nasłuchiwać na portach (do wyboru na którym) odpowiedzi klienta

i wyświetlić komunikat w messageboxie

Klient będzie wysyłał do serwera komunikaty poprzez porty (do wyświetlenia w messageboxie).

Wiecie może jak optymalnie zrobić taką aplikacje (chodzi mi o maksymalną wydajność takiego rozwiązania)??

Znalazłem taki przykład w internecie: http://www.codeguru.pl/article-552.aspx

Co o tym myślicie??

Założeniem projektu jest to że do 1 serwera będzie podłączone do 1000 klientów jednocześnie (klient będzie wysyłał komunikat do serwera co 15 sekund). Czy powyższy przykład "uciągnie" takie rozwiązanie?? Czy do 1 portu serwera można przyporządkować aż tyle klientów jednocześnie??

Ponoć najlepiej do tego nadają się serwery synchroniczne...

Z góry dzięki za pomoc :slight_smile:

Pozdrawiam Northwest


(Fiołek) #2

Serwer nasłuchuje na jednym porcie(i jednym gnieździe), gdy ktoś chce się do niego podłączyć, tworzy nowe gniazdo i wątek, i w nim się komunikuje z klientem(a ten wątek co nasłuchiwał, nasłuchuje dalej).

Ja(i przypuszczam, że większość) bym tak zrobił. Artykułu nie czytałem.

Nie wiem czy wyświetlanie MessageBoxa jest dobrym pomysłem. 1k na 15 sekund to troszkę dużo.


(northwest) #3

ale z tego co wyczytałem są 2 rodzaje serwerów - synchroniczne i asynchroniczne- Ty mówisz o asynchronicznym??

z tymi mesageboxami to tylko przykład :wink: - ogólnie to będę zapisywał komunikaty do pliku...:slight_smile:

potrzebuje takie zestawienie klienta i serwera które umożliwi mi komunikację pomiędzy serwerem a klientem (obustronną).

Klientów będzie ok 1000... co ok 15 sekund każdy z klientów będzie wysyłał komunikat poprzez gniazdo do serwera i serwer będzie zapisywał tą wartość do pliku. Co 30 sekund serwer ma wysyłać komunikat do każdego z klientów...

ogólnie takie jest założenie projektu;) możesz coś podpowiedzieć lub najlepiej pokazać jakiś przykład??:slight_smile:

z góry WIELKIE dzięki za pomoc:)))


(Fiołek) #4

Ale po co w takim czymś synchronizacja? Jaka synchronizacja? Czego? Jedyne co musisz zsynchronizować to dostęp do pliku.

Kodu nie podam, bo by mi wyszło jakieś 50 linii kodu :stuck_out_tongue:


(northwest) #5

hmmm... z tego artykułu wyczytałem że:

gniazda mogą wykorzystywać różne protokoły, np. UDP, TCP. Komunikacja może się odbywać na dwa sposoby:

  • synchronicznie

  • asynchronicznie.

W przypadku trybu synchronicznego jeśli program oczekuje na jakieś dane od klienta, to blokuje on odbieranie danych od innych klientów dopóki nie otrzyma interesujących go danych. W sytuacji, gdy jakiś inny klient chce podłączyć się do serwera, to nie może tego uczynić ponieważ jest blokowany przez pierwszego klienta.

Natomiast w trybie asynchronicznym, w czasie kiedy serwer oczekuje na połączenia lub odbiera dane od klienta, to może cały czas przetwarzać zapytania od innych klientów.

czyli wychodzi na to że te asynchroniczne są lepsze :wink:)

a mógłbyś mi podesłać na maila sampla??:slight_smile: ***

edit_

Pomagamy sobie na forum a nie na kanałach prywatnych.

adpawl


(Fiołek) #6

Synchroniczne to tylko przy niewielkiej ilości danych i małej ilości klientów, w której serwer prawie nic by nie robił.

Nie podeśle kodu, bo go znaleźć to pestka.


(northwest) #7

http://www.codeproject.com/KB/IP/ChatAs ... x2274685xx - znalazłem coś takiego :wink:

to będzie okey??:slight_smile:

chciałbym zrozumieć działanie tego, dodać 1 rzecz (nie chce bez sensu korzystać z gotowca)- pomożesz mi z tym??:slight_smile:


(Fiołek) #8

Jeśli będziesz miał sensowny problem(nie w stylu "dajcie mi kod", "co tu jest źle"), to pytaj na forum, pomożemy.


(northwest) #9

nooo okey, ale żeby mieć sensowny problem to trzeba wiedzieć co i jak - a ja się aktualnie radze na czym się oprzeć...

W dniu 26.05.2008 , o godzinie 22:32 został dopisany post przez northwest

nie mogę znaleźć :(( pytałem też na innych formach i nikt nie wie:(

mogę się odezwać do Ciebie na priv - pomógłbyś mi z tym??

Bardzo mi zależy żeby to zrobić i skumać bo jest mi to baaaardzo potrzebne...

z góry dziękuje za pomoc,

pozdrawiam Łukasz


(Fiołek) #10

Czy tak trudno znaleźć sobie dokumentacje(tu MSDN) i poczytać, potem usiąść do środowiska(ew. edytora i linii komend) i coś napisać? Chłopie, to w konsoli jest około 100 linii kodu(architektura klient-serwer).


(northwest) #11

kombinuje nooo...:confused: ściągnąłem sobie to: http://www.codeproject.com/KB/IP/TCPIPChat.aspx

i przerabiam do graficznej formy: http://www.trif.superhost.pl/serwerek.zip

próbuje przenieść ten konsolowy serwerek do windowsforms:

http://www.trif.superhost.pl/serwerek.zip

wszystko ładnie mi sie kompiluje, ale po uruchomieniu i przy próbie zalogowania klieta (tego oryginalnego) serwerek się wywala...:frowning:

pomożesz mi krok po kroczku z tym??:slight_smile:


(Monczkin) #12

Nazwij proszę temat konkretnie. Poczytaj zasady pisania na forum.


(Fiołek) #13

Jak zapłacisz, pomogę. Tak to nie mam zamiaru. To na tyle banalny problem, że powinieneś go sam rozwiązać, a gdy już byłbyś bardzo zdesperowany, powinieneś zwrócić się o pomoc na forum z dokładnym opisem problemu.


(adpawl) #14

northwest , gotowca nikt Ci nie napisze!

Jeśli nie chcesz sam pisać, to zleć komuś odpłatnie napisanie kodu na jakimś forum programistycznym, czy grupie dyskusyjnej.

Inaczej nie ciągnięcie tego wątku nie ma najmniejszego sensu.

...tym bardziej że byłeś jeszcze proszony o zmianę tematu na konkretny.