komunikator łączący się z serwerem http

0

Chciałbym napisać komunikator w C# jednak opierający się na wymianie danych poprzez serwer WWW- tzn klient łączy się z serwerem, wysyła wiadomość tekstową, drugi klient połączony z serwerem "ściąga" tę wiadomość z serwera i odczytuje. Chyba, że jest jakaś inna możliwość opierająca się na wymianie danych tekstowych między dwoma osobami wykorzystując protokół HTTP?

Wcześniej pisałem coś z socketami na protokole TCP, ale są z tym same problemy, trzeba mieć IP zewnętrzne, ustawić w routerze jakieś port forwarding, słowem: tragedia, komunikator nie może tak działać, bo nikt przecież nie będzie specjalnie niczego ustawiał choćby na routerze żeby się łączyć.

Myślałem o FTP, ale jak wiadomo to jest bardziej do plików, nie działoby się to w czasie rzeczywistym. Znalazłem też coś z remoting i mam taki fragment kodu dla klienta:

 
  private Chat chat;

        private bool isConnected = false;


            
    HttpChannel channel= new HttpChannel(); 
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownClientType(typeof(Chat), "http://localhost:1978/Chat");
chat = new Chat();

i taki dla serwera:


HttpChannel channel = new HttpChannel(1978);
                ChannelServices.RegisterChannel(channel, false);
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(Chat), "Chat", WellKnownObjectMode.Singleton)
 

To są dwie osobne formy dla serwera i klienta i jest też biblioteka klas gdzie jest klasa Chat.
I tutaj takie coś działa, jednak kiedy wpiszę w części dla klienta jakiś inny adres to oczywiście nie działa.
Jestem kompletnie ale to kompletnie zielony jeśli chodzi o sieci prosiłbym więc gdyby ktoś mógł podać tutaj, jaki dokładnie mam dać adres- najlepiej przykład, jak to zrobić po prostu abym mógł łączyć się tutaj z jakimś serwerem HTTP i wymieniać dane między dwoma użytkownikami którzy mają włączoną aplikację klient.

Mój problem jest taki, że wszędzie są pokazane tutoriale gdzie jest oczywiście nazwa typu "naszserwer" a mnie interesuje konkretnie jaka to ma być nazwa- gdybym np utworzył jakiś serwer na cba.pl? Prosiłbym o wytłumaczenie krok po kroku, skąd taki serwer wziąć- chodzi mi o jakiś darmowy, gdzie założyć, jaki wpisać adres, port? Nie mam zielonego pojęcia jak tutaj należy działać, więc potrzebowałbym najprostszego wytłumaczenia jak dla laika.

Interesują mnie tylko te fragmenty kodu gdzie włączamy nasłuchiwanie serwera oraz gdzie łączymy się z serwerem WWW. Gdyby ktoś mógł tylko dać jakiś gotowiec w tych fragmentach- będę bardzo wdzięczny.

0

Serwer powinien czekać na 'wezwanie' klienta (fakt podłączenia danej osoby) czyli musisz dać jakiś PortListener(), wyciągnij sobie na formę kontrolkę BackgroundWorker i uzyskasz dostęp do PortListener() i innych,

Klient podobnie - BackgroundWorker, PortListener() oraz dodatkowo PocketHandler() w celu dynamicznej konstrukcji pakietu do przesłania na odpowiedni (z nasłuchującym PortListener()) port serwera. Obsługę konstrukcji pakietu podpinasz pod button Wyślij, lub/oraz pod event naciśnięcia entera.

Co do linku - znalazłem opis budowy prostego komunikatora w C#, opis ciut stary, ale aplikacja opisana w nim działa, sam testowałem :)
http://www.centrumxp.pl/dotNet/831,Komunikator-w-C.aspx

0
pixelplus napisał(a):

Serwer powinien czekać na 'wezwanie' klienta (fakt podłączenia danej osoby) czyli musisz dać jakiś PortListener(), wyciągnij sobie na formę kontrolkę BackgroundWorker i uzyskasz dostęp do PortListener() i innych,

Klient podobnie - BackgroundWorker, PortListener() oraz dodatkowo PocketHandler() w celu dynamicznej konstrukcji pakietu do przesłania na odpowiedni (z nasłuchującym PortListener()) port serwera. Obsługę konstrukcji pakietu podpinasz pod button Wyślij, lub/oraz pod event naciśnięcia entera.

Co do linku - znalazłem opis budowy prostego komunikatora w C#, opis ciut stary, ale aplikacja opisana w nim działa, sam testowałem :)
http://www.centrumxp.pl/dotNet/831,Komunikator-w-C.aspx

Ale przecież mi nie o to chodzi, sam też ten komunikator testowałem i widzę, że działa on tylko na jednym komputerze, ewentualnie chyba na komputerach w tej samej sieci lokalnej. Mi chodzi o poważny komunikator- czyli taki do kontaktowania się kogokolwiek z kimkolwiek, a taki musi chyba być oparty o jakiś serwer internetowy i właśnie o to mi chodzi w moim pytaniu. Jako, że kompletnie nie znam się na sieciach, serwerach itp, prosiłbym kogoś o gotowca- w sensie te kilka linijek odpowiedzialnych za połączenie z serwerem HTTP, czy jakimś innym do czasu rzeczywistego, za nasłuchiwanie- strona klienta i serwera. O gotowca WRAZ z jakimś prawdziwym adresem serwera, jeśli przecież mógłby być to darmowy serwer założony na jakiejś stronie cba.pl czy coś w tym rodzaju, to chyba nie byłoby problemu? Generalnie po prostu chodzi mi o komunikator do łączenia się każdego z każdym, z tymże bez żadnego Hamachi, itp.

Po prostu te parę linijek kodu odpowiedzialnych za połączenie- po stronie klienta i serwera.

0

Ale serwer też musisz sobie napisać - co z tego, że jest to serwer HTTP, musisz też oprogramować takie akcje jak wysłanie wiadomości czy odebranie wiadomości - skąd biedny serwer HTTP, który jest "glupi" i potrafi tylko odsyłać strony na odpowiednie żądanie ma coś wiedzieć o jakimś komunikatorze?

Jeżeli chcesz stworzyć komunikator oparty o HTTP to najlogiczniej będzie zacząć od zaplanowania, jak to ma działać. Możesz wykorzystać konwencję REST, czyli np. żądanie POST pod http://example.com/user1/ powoduje wysłanie wiadomości do użytkownika o nazwie "user1" z treścią taką jak treść żądania. A może nie wysłanie, tylko zapisanie gdzieś na serwerze, a użytkownik "user1" po zalogowaniu dostanie dopiero swoje zapisane wcześniej wiadomości? Skoro mówimy o zalogowaniu, to trzeba też jakoś przewidzieć logowanie, może jakaś baza danych użytkowników i haseł?

A jeśli mówisz o cba.pl to tam jedynym językiem skryptowym jaki jest dostępny jest chyba PHP - więc logikę serwera musisz napisać sobie w PHP, a logikę klienta już np. w C#.

0
rafaltheo napisał(a):

Wcześniej pisałem coś z socketami na protokole TCP, ale są z tym same problemy, trzeba mieć IP zewnętrzne, ustawić w routerze jakieś port forwarding, słowem: tragedia, komunikator nie może tak działać, bo nikt przecież nie będzie specjalnie niczego ustawiał choćby na routerze żeby się łączyć.

Zabierasz się za to od d**y strony. Jeżeli chcesz programować sieciowo to dowiedz się jak działają sieci. Żaden serwer, czy to TCP czy HTTP (który nota bene wykorzystuje protokół TCP) bez zewnętrznego IP i bez port forwardingu działać nie będzie. Takie przykładowe GG też działa na architekturze klient-serwer i guess what: serwer GG też ma zewnętrzne IP oraz port forwarding. I tu też źle zrozumiałeś mój post w innym temacie, w którym Ci to tłumaczyłem. To nie użytkownicy komunikatora mają mieć zewnętrzne IP, tylko serwer.
Dowiedz się najpierw czegokolwiek o sieciach, a potem je wykorzystuj w swoich programach bo w taki sposób daleko nie zajdziesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1