Strona 1 z 2

Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: wtorek, 22 lipca 2008, 17:50
przez Koziol
Poszukuje opisu tudzież gotowego kodu źródłowego (nie żeby ctrl+c i ctrl+v) do apilkacji klienta i servera dla tpliku wymienionego w temacie (ServerSide 1.6) z downloadu (http://cyfbar.republika.pl/userprog.htm).

Nie mogę dojść do tego jak zrobić coś typu bany, listę użytkowników, prywatne wiadomości itp. w oparciu o komponent Client/Server Socket.

W oparciu o tutorial http://cyfbar.republika.pl/kurs5.html oarz rzeczy znalezione w sieci udało mi się zrozumieć metode działania socketów w borlandzie ale z w/w rzeczami mam nadal problem.

Z góry dziękuje za pomoc ;)

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: wtorek, 22 lipca 2008, 20:28
przez wargo
Jesli chodzi o ban to zrób przechwytywani ip klienta i mały if (jesli chcesz domyślne nie ma problemu, jeśli później definowalne to moze być trudniejsze. Tak samo z prywatnymi.

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 09:44
przez Koziol
hmmmm... czyli nie bedzie to proste?

Wiem że można porbrać numer socket'u ale nie wiem czy to coś gdzieś pomoże... :/

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 10:05
przez Cyfrowy Baron
Jedyny logiczny i skuteczny sposób to ten opisany przez wargo.
Klient loguje się do serwera, serwer identyfikuje go na podstawie adresu IP, tworzy log w którym przypisuje login i hasło do IP użytkownika. Potem sprawdza, czy login i hasło się zgadzają i czy dany Login nie jest zbanowany jeżeli jest zbanowany to odrzuca IP, czyli nie podłącza danego IP. Dla serwera istotne są Login i Hasło dlatego musi je przechowywać, nie może identyfikować użytkownika na podstawie IP, gdyż IP może być zmienne i inne przy każdej próbie logowania.

Mechanizm jest taki: klient wysyła do serwera prośbę o podłączenie, wysyła mu swoje IP oraz Login i Hasło, serwer rejestruje IP + Login + Hałso, sprawdza w bazie danych czy taki Login istnieje i czy Hasło do niego pasuje, jeżeli tak, sprawdza na liście Banów, czy Login tam się znajduje, jeżeli TAK odrzuca IP i nie pozwala się podłączyć, jeżeli NIE podłącza IP.

Proste!

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 10:44
przez Koziol
wygląda w miare prosto.

a w jaki sposob mozna rozwiazac te prywatne wiadomości? Właśnie do tego myślałem że numer socketu sie przydaje.

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 10:47
przez wargo
Zrobić tak samo jak główne tylko że właśnie z tym numerem i dodatkowymi buttonami ;)

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 10:48
przez Koziol
Wydaje mi się że nie jest to takie proste :P

Przymierzałem sie do tego już kilka razy i nie dałem rady ;P

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 11:13
przez Cyfrowy Baron
Prywatne wiadomości wysyłasz poprzez serwer, czyli:

Klient wysyła na serwer swój IP + Login + Hasło + treść wiadomości + Login osoby do której wiadomość ma trafić.
Serwer przejmuje treść wiadomości, potem sprawdza Login osoby do której wiadomość ma trafić, jeżeli login istnieje (jest podłączony) to sprawdza w swojej bazie danych jaki IP ma w danym momencie przypisany dany Login i wysyła wiadomość do tego IP. Wiadomości zawsze są wysyłane na wybrany IP poprzez porównanie z Loginem.

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 11:22
przez Koziol
A jakiej funkcji użyć w socketach żeby wysłać wiadomość pod podany numer ip? SendText czy SendBuf nigdzie nie przyjmuje jako argumentu numeru ip...

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 12:06
przez Cyfrowy Baron
Serwer pośredniczy w wysyłaniu wiadomości, czyli odbiera wiadomość od klienta 1 i przesyła go na numer IP klienta 2, tak jak to opisałem w kursie Prosty komunikator sieciowy.

Inny sposób Serwer rejestruje tylko IP i przesyła do rozmówcy, czyli Rozmówca_1 łączy się z serwerem Serwer rejestruje jego IP (Rozmówca_1=IP), Rozmówca_2 łączy się z serwerem, serwer rejestruje jego IP (Rozmówca_2=IP) wysyła do Rozmówca_1 IP Romówca_2, czyli 1 zna już IP 2 więc może mu wysyłać wiadomości bezpośrednio pod jego IP bez udziału serwera, tak samo postępuje z Rozmówc_2, gdy już obydwaj znają sowje IP mogą przesyłać sobie wiadomości bezpośrednio pod swoje IP. W tym rozwiązaniu serwer tylko pośredniczy w połączeniu komunikacji, obydwaj rozmówcy muszą działać w trybie klient-serwer i obydwaj muszą nawiązać między sobą połączenie w tych dwóch trybach.
Kluczem do przesyłania wiadomości jest IP klienta, któremu chcemy wysłać wiadomość.
Komunikator opisany w kursie właśnie tak działa, może być jednocześnie i klientem i serwerem.

Czego nie rozumiesz? Wiadomości są wysyłane przez funkcję SendText pod wybranego - podłączonego - klienta określonego przez funkcję Connections[numer_klienta_na liście]. Nic się tutaj samo nie zrobi, gdyż Sockety tylko przesyłają i odbierają komunikaty, niczego nie rejestrują, nie zapamiętują, nie rozróżniają. Cały mechanizm obsługujący musisz sam stworzyć i włączyć w niego sockety. Sockety tylko podłączają, odłączają, oczekują na komunikat, odbierają komunikat. To proste biblioteki, bez żadnych zaawansowanych funkcji, dlatego w nowszych wersjach BCB już ich nie ma. Ja używam BCB v. 10 i nie ma u mnie już socketów, zamiast nich są inne bardziej złożone, mniej uniwersalne, a przez to jest ich więcej.

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 12:13
przez Koziol
To wszystko co opisałeś już wiem ;) kurs o komunikatorze przerobiłem...

Sprawa jest nie co bardziej skomplikowana.

Przykładowo mam serwer + klient_1 do klient_10 i przykładowo klient_3 chce przesłać wiadomośc do klient_7 jak coś takiego zorganizować :P

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 13:02
przez Cyfrowy Baron
klinet_3 wysyła na serwer wiadomość + nazwę klinet_7, serwer sprawdza w swojej bazie danych jaki IP ma klinet_7 i przesyła wiadomość pod IP klient_7

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 13:06
przez Koziol
Włąsnie w tym miejscu mam problem... Jak uzyskać to że on wyśle pod ten adres IP tę wiadomość. Z jakiej funkcji skorzystać bo w SendText nie ma możliwości wysłać wiadomości pod wskazany adres IP. i w tym miejsu zawsze stawałem i nie wiedziałem jak ruszyć dalej.

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 13:09
przez Cyfrowy Baron
Przed SendText jest Connections[numer_klienta_na_liście] i to ta lista gromadzi IP pod które wysyła wiadomość, trzeba więc sprawdzić które miejsce zajmuje na liście dane IP.

Re: Client/Server Socket "coś ala ServerSide 1.6"

Nowy postNapisane: środa, 23 lipca 2008, 13:21
przez Koziol
a jest jakaś funkcja ktora to podaje?
przeszukując google nie udało mi się trafić na funkcję która to sprawdza.