Jest wiele programow ktore dzialaja w oparciu o serwery - najbardziej banalny przyklad to chyba Gadu-Gadu. Taki system rozwiazuje problemy z uzytkownikami za natem podczas polaczen 'bezposrednich'. Czy ktos moze mi powiedziec jak wyglada taki system i w jaki sposob oprzec to na Delphi? Zastanawia mnie tez jak to sie dzieje ze Gadu wie kto jest dostepny, kto nie itp? Moze jest to oparte o baze danych ale przeciez przy takiej ilosci odwolan SQL wszystko by siadlo? Bede bardzo wdzieczny jak ktos nakresli mi jak to wyglada i jak mogloby wygladac za pomoca programowania w delphi - chyba ze rozwiazania sa uniwersalne... Z gory dziekuje za pomoc!
(ps. od razu mowie ze nie pisze kolejnego komunikatora :P)
Wszystko zależy od tego, co chcesz osiągnąć. Aplikacji opartych o serwery jest multum. Ale sporo lepszym przykładem niż przykład GG jest telnet. Wydaje mi się, że to najprostsza aplikacja łącząca się z serwerem. A co robi serwer, to już kwestia tylko inwencji twórczej autora.
Gadu-Gadu nie jest dobrym przykładem do analizy jeszcze z jednego powodu - brak dokumentacji, brak dostępnego kodu klienta i brak dostępnego kodu serwera.
Akurat Gadu-Gadu opiera się o bazę danych. Z tym że Gadu-Gadu sp z o.o. dysponuje prawie dziesięcioma serwerami odpowiedzialnymi za połączenia z klientami plus kilka zapasowych i parę jeszcze specjalistycznych do innych zadań. Z całą pewnościąbaza danych stoi na osobnej maszynie z bardzo szybkimi połączeniami (GB?) z pozostałymi serwerami i na pewno na mocniejszym silniku niż MySQL. A co do tego wywracania, to przecież GG się wywraca bardzo często ;).
Jeśli interesuje Cię komunikacja natychmiastowa, polecam przyjrzeć się protokołowi XMPP (znanemu również jako Jabber): Masz dostępnych wiele klientów wraz z kodem źródłowym chyba w każdym normalnym języku programowania (również PHP i inne bardzo nietypowe w tych zastosowaniach języki), do tego wiele różnych serwerów pod różne systemy operacyjne, a na dokładkę pełną dokumentację protokołu.
A czy moze mi ktos przyblizyc XMPP? W necie jest to troszke chaotycznie porozmieszczane i trudno dotrzec do istotnych informacji... Chodzi mi np. o to jaki, gdzie i w jaki sposob mozna postawic serwer XMPP? Sa jakies komponenty dla Delphi do obslugi tego protokolu?
Dla Delphi widziałem ze strony klienta. Jeśli chodzi o stawianie serwera, to najczęściej spotykany jest jabberd2 (pod Linuxa), ale pod Windęteż sięcośznajdzie. Generalnie polecam:
www.jabberpl.org (i forum.jabberpl.org)
www.jabberstudio.org
www.jabber.org
//Od kiedy "D e l p h i e g o" jest ortem??
to ty wysyłasz że jesteś taki czy owaki a serwerGG przekazuje to dalej tym co sie pytają
const
// PAKIETY ODEBRANE
GG_WELCOME = $1; //Liczba do wyznaczenie hashu hasła
GG_LOGIN_OK = $3; //Logowanie powiodło się
GG_SEND_MSG_ACK = $5; //Potwierdzenie wiadomości
GG_LOGIN_FAILED = $9; //Logowanie nie powiodło się
GG_RECV_MSG = $a; //Przychodząca wiadomość
GG_DISCONNECTING = $b; //Zerwanie połączenia
GG_NOTIFY_REPLY = $c; //Stan listy kontaktów przed GG 6.0
GG_PUBDIR50_REPLY = $e; //Odpowiedź katalogu publicznego
GG_STATUS60 = $f; //Zmiana stanu
GG_USERLIST_REPLY = $10; //Odpowiedź listy kontaktów na serwerze
GG_NOTIFY_REPLY60 = $11; //Stan listy kontaktów
GG_NEED_EMAIL = $14; //Logowanie powiodło się, ale powinniśmy uzupełnić adres e-mail w katalogu publicznym
// PAKIETY WYSŁANE
GG_NEW_STATUS = $2; //Zmiana stanu
GG_PING = $8; //Ping
GG_SEND_MSG = $b; //Wysłanie wiadomości
GG_ADD_NOTIFY = $d; //Dodanie do listy kontaktów
GG_REMOVE_NOTIFY = $e; //Usunięcie z listy kontaktów
GG_NOTIFY_FIRST = $f; //Początkowy fragment listy kontaktów większej niż 400 wpisów
GG_NOTIFY_LAST = $10; //Ostatni fragment listy kontaktów
GG_LIST_EMPTY = $12; //Pusta lista
GG_PUBDIR50_REQUEST = $14; //Zapytanie katalogu publicznego
GG_LOGIN60 = $15; //Logowanie
GG_USERLIST_REQUEST = $16; //Zapytanie listy kontaktów na serwerze
// MOŻLIWE STATUSY
GG_STATUS_NOT_AVAIL = $1; //Niedostępny
GG_STATUS_NOT_AVAIL_DESCR = $15; //Niedostępny z opisem
GG_STATUS_AVAIL = $2; //Dostępny
GG_STATUS_AVAIL_DESCR = $4; //Dostępny z opisem
GG_STATUS_BUSY = $3; //Zajęty
GG_STATUS_BUSY_DESCR = $5; //Zajęty z opisem
GG_STATUS_INVISIBLE = $14; //Niewidoczny
GG_STATUS_INVISIBLE_DESCR = $16; //Niewidoczny z opisem
GG_STATUS_BLOCKED = $6; //Zablokowany
GG_STATUS_FRIENDS_MASK = $8000; //Tylko dla przyjaciół
tak wyglada nagłówek pakietów protokołu GG
TPakiet = packed record
typ : integer;
dlugosc: integer;
end;
logujesz sie za pomoca takiego pakietu
TLoguj = record // $15
pakiet : TPakiet;
Numer : Integer;
HashPass : Integer;
Status : Integer;
WersjaGG : Integer;
ZeroChar : Char;
LocalIP : Integer;
Port : Short;
ExternalIP : Integer;
ExternalPort: Short;
Rozmiar_graf : Char;
UnknownByte : Char;
end;
ustawiasz w nich swoje dane ja sie zalogujesz wysylasz swoja liste kontaktów
TMoja_lista = packed record //$10 jeśli twoja lista jest mniejsza niż 400
pakiet : TPakiet;
numer : integer;
typ : char;
end;
w odpowiedzi dostajesz pakiet. masz tutaj informacje o swoim kontakcie zaraz po zalogowaniu
TGG_NOTIFY_REPLY60 = record //$11
numer: integer;
status: char;
remote_ip: integer;
remote_port: short;
wersjaGG: char;
rozmiar_graf: char;
unknown1: char;
description_size: char;
description: char;
czas: integer;
end;
a taki bedziesz dostawał później jesli na twojej liście kontaktów coś sie zmini czyli dojdzie ktoś nowy, ktoś zmieni opis czy se pójdzie
TGG_STATUS60 // $F
numer: integer;
status: char;
remote_ip: integer;
remote_port: short;
wersjaGG: char;
rozmiar_graf: char;
unknown1: char;
opis: TOpis;
czas: integer;
end;
i tak właśnie dowiadujesz się o tym kto jest dostepny, kto ma jaki opis jaka wersje GG, IP, czy jaką ma ustawiąną wielkość przyjmowanej grafiki.
To taki mały zarys.
Exodus jest tak skomplikowany ze nie moge nawet wyodrebic funckjicji odpowiedizalnych za polaczenie, logowanie itd nie wspominajac juz o tym jak to wszystko polaczyc w jedna calosc. Sciagnalem sobie na kompa serwerek i na razie na tym stoje bo nie moge przegryzc sie nawet przez polaczenie :( Nie szukam gotowej solucji ani toturiala ale jakiegos naprowadzenia bo zanim przegryze sie przez Exdusa i znajde tam to co mi jest potrzebne (a jest to ulamek funkcjonalnosci tego programu - potrzebuje logowania, statusow, przesylania komunikatow i nic wiecej) to mina tygodnie a nawet miesiace... Zal troche tego czasu bo i tak na 'zabawe w programowanie' mam niewiele czasu ze wzgledu na studia :( Nie zale sie ale prosze jedynie o pomoc :)
Akurat Exodusa bym do praktycznych zastosowań nie polecał - coś tam chciałem sobie przetestować (z pół roku temu) i do tej pory (mimo używania na codzień innego klienta) transport Gadu się nie zachowuje jak potrzeba ;).
Natomiast jeśli chcesz na prawdę prosty komunikator, to gdzieś można poszukać czegoś takiego jako przykładu obsługi TClientSocket/TServerSocket.
Tak jak mowilem nie chce tworzyc komunikatora - potrzebuje platformy dla komunikacji P2P miedzy uzytkownikami ale chodzi tu nie o czatowanie tylko o zupelnie inne sprawy. Statusy maja sluzyc jedynie do okreslania kanalow, a wiadomosci forme komunikacji miedzy elementami systemu. Zalezy mi na takim systemie ktory bedzie w stanie oblsuzyc wiele polaczen wiec nadaje sie do tego zdecydowanie XMPP. Poczytalem calkiem sporo o samym systemie i jego funkcjonowaniu ale nie moge go rozgryzc wzgledem Delphi :/ Niby wszystko OK, bo mam pomysl i mozna by ruszac ale nie wiem na jakiej zasadzie oprzec aplikacje wiec poki nie rozwiaze problemu bezposredniej komunikacji (w tym nat-to-nat) nie ma sie za co brac. Poddaje wciaz analizie kod Exodusa ale im dluzej w tym siedze tym wydaje mi sie to bardziej szalone :/ Nie chce opierac tego o ActivX'y ktore sa w necie bo bedzie to wymagalo instalacji po stronie uzytkownika dodatkowych modulow, a tego chcialbym uniknac. Prosze - pomozcie
A więc po kolei:
Generalnie gdzieś w sieci widziałem jakieś komponenty do Jabbera (na jabberpl.org w dziale Developer czy jakoś tak są chyba linki, jak nie, to gdzieś na jabberstudio.org coś powinno się znaleźć).
Jeśli chodzi natomiast o komunikację nat-nat p2p to nie jest to tak na prawdę możliwe. Wszystko opiera się o jakieś serwery (w Jabberze są tzw. file-proxy), albo rozproszoną sieć "serwerów" na komputerach klientów (tak jak jest zdaje się zrealizowana kwestia Skype - jeśli masz zewnętrzne IP i masz "wolne" - w sensie "free" nie "slow" ;) - łącze, to stajesz się serwerem pośredniczącym dla takich, co chcą pogadać zza natów).
No chyba, że istnieje możliwość przekierowywania portów albo otworzenia tunelu między natami, ale jest to kwestia konfiguracji routera/serwera natu a nie programu na komputerze-kliencie.
Ziomek... No przeciez pisalem ze do tego sluzyc ma mi XMPP zeby sluzyl jako serwer przy polaczeniach. Gadu-Gadu w ogole nie bralem pod uwage - dla mnie protokol GG jest jednym wielkim pobojowiskiem. Samo XMPP w przeciwienstwie do Jabbera to platorma ktora ma sluzyc nie tylko dla IM ale dla komunikacji jako takiej rozumienej ogolnie i szeroko. Jabber czesto jest mylony z XMPP - owszem to drugie powstalo z tego pierwszego ale obecnie Jabber korzysta z jedynie waskiego zakresu swojego 'potomka' (choc XMPP jest wstecznie kompatybilny do Jabbera). Jak juz wspominalem daje to ogromne mozliwsci ALE nie jestem w stanie nawet polaczyc sie z serwerem - potrzebuje jakiejs pomocy :) Na jabber.org nie ma komponentow - jest tam exodus i jabbercom ale to drugie to kontrolka ActiveX z ktorej korzystac bym raczej nie chcial. Moze ktos kiedys sukcesem zakonczyl zabawe z tym protokolem?
Szczerze powiedziawszy jeśli jesteś zdecydowany na XMPP, to radziłbym po pomoc dalszą sięgać na forum jabberpl.org->Programowanie. Tam znajdziesz raczej więcej osób, które mogą mieć z tym szersze doświadczenie.
sek w tym ze tam do zadnych logicznych wnioskow nikt do tej pory nie doszedl choc tematow zwiazanych z 'delphi-jabber' jest kilka. na tym forum jest zdecydowanie wiecej specjalistow :)
czy ktos wie cos na temat komponentu tjabber? bo pojawily sie na tym forum jakies szczatkowe informacje ale sprawa jakos ucichla (w zasadzie nawet nie powstala) a ja nic nie wiem :) sprawa XMPP kontra Jabber nie ma juz teraz wiekszego znaczenia :/ analizuje wciaz exodusa ale zeby go zrozumiec trzeba przejdzec kilka tysiecy linii a jest tak napisany ze nie wiadomo co do czego... HELP! :(
Nav coś zaczynał tworzyć o ile pamiętam komponent TJabber, ale nie wiem co z tego wyszło - mam wrażenie, że nic.
[browar] Dzieki komponentom INDY mozna laczyc zza natu z serwerem zza natu dzieki dodatkowemu serwerowi glownemu ktory posiada zewnetrzne IP
Zrobilem program na tych komponentach ktory mam tylko dla siebie , bo gdy wepchne komus klienta to robie z jego kompem co chce i nawet jesli jest on za natem.
To nie trojan a raczej takie zdalne sterowanie kompem , bo moge nim wszystko co w kompie mozliwe, nawet otworzyc notatnik i wnim pisac czy przegladarke internetowa i przegladac, wpisywac gdziekolwiek wszystko co chce! Plik np: kernel32.dll moge otworzyc i zedytowac po czym zapisac go nawet jesli jest w stanie uzywania przez process...
Anonim no band no hacker [!!!] [!!!] [!!!] [browar] [browar] [browar]
cya [!!!]