komunikator łączący się z serwerem http

komunikator łączący się z serwerem http
RA
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:64
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:

Kopiuj
 
  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:

Kopiuj

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.

PI
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 6 lat
  • Postów:61
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

edytowany 2x, ostatnio: pixelplus
RA
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:64
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.

Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 17 godzin
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#.

SA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 11 lat
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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)