Client/Server Socket "coÅ› ala ServerSide 1.6"

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Cyfrowy Baron » Å›roda, 23 lipca 2008, 14:12

Nie ma żadnej funkcji sprawdzającej, sam ją musisz stworzyć. Przejżyj jeszcze raz dokładnie kurs, tam serwer podłącza po kolei użytkowników a wszystkie operacje zapisuje w oknie komunikatu (MemoZdarzenia) to tam będą się znajdowały adresy IP.

Wydaje mi się, że wytyczyłeś sobie zbyt ambitne zadanie. Spróbuj najpierw zrobić prosty komunikator do komunikacji między serwerem a użytkownikiem, żeby zrozumieć zasadę działania. Dopóki nie rozumiesz jak to działa, do niczego nie dojdziesz. Gdy już będziesz miał gotowy prosty komunikator klient-serwer stopniowo go ulepszaj. Programów nie tworzy się w jeden dzień.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Koziol » Å›roda, 23 lipca 2008, 14:16

taki projekt już robiłem na zaliczenie na studiach. 5 dostałem ;)

Taki pomysł też miałem ale problem stanowi to że nie wim jak sprawdzić aktualnie przypisany numer indeksu chodzi o
Connections[numer_klienta_na_liście]
skąd mam wiedzieć jaki numer mu przypisano ?

EDIT:

Chyba że przydziela te indexy zgodnie z up-time serwera czyli od 0 do jakiejś tam liczby
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Cyfrowy Baron » Å›roda, 23 lipca 2008, 14:31

W momencie gdy klient wysyła do serwera prośbę o zalogowanie, serwer przechwytuje jego IP, wysyła do klienta żądanie o podanie loginu i czeka jak klient poda login to przypisuje go do tego IP, jak nie to go rozłącza.
Nie oczekuj że na socketach zrobisz taki komunikator jak GG, gdyż one takich możłiwości nie posiadają.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Koziol » Å›roda, 23 lipca 2008, 14:35

nie.. chodzi bardziej o system zarzadzania raportami dziennymi w sieci LAN.

a to poprzednie pytanie tyczy się bardziej jak działa sam komponent server socket tzn. Jak on przydziela te numery połączeń?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Cyfrowy Baron » Å›roda, 23 lipca 2008, 14:58

Przez przydzielanie numerów rozumiesz indeksowanie kolejności, jest to robione zgodnie z kolejnością nadchodzących żądań podłączenia do serwera.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Koziol » Å›roda, 23 lipca 2008, 15:09

czyli przykładowo właczmy serwer i podłączają się klienci po koleji
id to 0, 1 ,2, 3,4,5,6,7,8,9,10...
klient któremu przypisano ID 5 się odłacza i po jakiejś godzinie wraca i ostatnie przydzielone id było 143 więc mu zostanie przydzielone id 144... (chodzi mi tu o te indeksowanie tego connections)
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Cyfrowy Baron » Å›roda, 23 lipca 2008, 16:27

Jak widzę nie rozumiesz, gdy klient wysyła do serwera prośbę o podłączenie, serwer sprawdza jego IP i wrzuca je na listę, a pierwszą wolną pozycję, np. pozycja 4. Miejsce na liście może się zmieniać jeżeli np. klient 3 się rozłączy, dlatego nie można polegać na kolejności IP na tej liście.

Ostatni raz podaję zasadę. Klient wysyła do serwera prośbę o podłączenie, serwer podłącza go zapamiętując IP z którego nadeszło żądanie podłączenia. Serwer jeszcze nie wie kto ma to IP, więc wysyła na to IP żądanie podania loginu i hasła, klient z tego IP otrzymuje żądanie od serwera wiec wysyła mu swój Login i hasło, serwer sprawdza czy login znajduje się na jego liście zarejestrowanych klientów, jeżeli tak sprawdza, czy hasło podane przez klienta razem z loginem pasuje do tego które ma zapisane w swojej bazie danych, jeżeli pasuje, przypisuje na jakieś liście do tego IP przesłany login - klient jest już podłączony, jeżeli login i hasło się nie zgadzają serwer odłącza przesłane IP. Od teraz serwer już wie jaka jest nazwa klienta (login) z danego IP, gdyż ma na liście zapisane IP = login.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Koziol » Å›roda, 23 lipca 2008, 16:32

Tą część rozumiem.

Chodzi mi o samą zasadę działania Server Socket. Skąd mam wiedzieć jaki numer indexu jest przypiasny do danego IP. Jak to sprawdzić? Bo o to się głównie rozchodzi.
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Cyfrowy Baron » Å›roda, 23 lipca 2008, 18:34

No już tyle razy tłumaczyłem.
Na jednej liście serwer ma wszystkie IP przypisane do indeksów, czyli 1=IP, 2=IP, 3=IP, itd. na drugiej liście ma przypisane nazwy do IP: login1=IP, login2=IP, login3=IP, itd. Teraz jeżeli chce wysłać wiadomość pod wybrany login, to sprawdza na drugiej liście jaki jest IP tego loginu, potem sprawdza na pierwszej liście jaki indeks ma ten IP i wysyła wiadomość pod ten indeks. Prosta zasada porównania zawartości dwóch list, obie maja wspólny mianownik, czyli adres IP, na jednej jest IP + numer indeksu, na drugiej jest IP + login, czyli program sprawdza:

login1=IP1, aha myśli sobie serwer, czyli login1 ma adres IP1, ale jaki to indeks, już wiem przeszukam sobie listę pierwszą na której też mam wszystkie IP i ich pozycje na liście. Serwer sprawdza, aha IP1 zajmuje 4 miejsce na liście więc wysyłam wiadomość pod na czwarty indeks, czyli: ServerSocket1->Socket->Connections[4]->SendText("wiadomość");
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Koziol » Å›roda, 23 lipca 2008, 18:58

Dobra są na jakiejś liście. Ciągle jest mowa o jednym i tym samym jak się do tego dobrać? Jakich gotowych elementów z komponentu Server Socket użyć? o to mi chodz z resztą już sobie poradze...

Znalazłem wypis wszystkich metod itp. zawartych w TCustomWinSocket http://www.netcoole.com/delphi2cs/rules ... Socket.htm ale niestety nie za bardzo to pomaga, bo nie ma opisu.

Tak wiem wiem to jest do Delphi ale w BCB jest wszystko to samo.
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Cyfrowy Baron » Å›roda, 23 lipca 2008, 19:46

Żadnych gotowych komponentów na to nie ma, musisz stworzyć własną funkcję porównującą zawartość obydwu list. Nie napiszesz żadnego programu jeżeli będziesz liczył na zbudowanie programu z klocków (komponentów), musisz zacząć programować, bo na to co opisałem, nie ma gotowych rozwiązań. Podałem Ci schemat działania, kod obsługujący musisz sam napisać.
Nikt Ci nie pomoże w napisaniu całego programu. Nie masz jeszcze wogóle żadnego kodu, żadnego programu, chcesz wrzucić komponenty na formularz i liczysz, że załatwią wszystko za Ciebie, a tymczasem wystarczy napisać prostą funkcję porównującą zawartość dwóch list, trzeba jednak najpierw ustalić strukturę, konstrukcję tych list, czyli jak przechowują swoje dane, może to wyglądać tak:

Lista 1 zawierajÄ…ca IP:

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5

Lista 2 zawierajÄ…ca IP + login

user2=192.168.0.5
user3=192.168.0.3
user5=192.168.0.1
user1=192.168.0.4
user4=192.168.0.2

porównanie list i zwrócenie indeksu z pierwszej listy:
Kod: Zaznacz cały
//---------------------------------------------------------------------------
int TForm1::GetSocketIndex(String login)
{

  for (int i = 0; i < ListBox1->Items->Count; i++) // ListBox1 = lista 1
  {
   if(ListBox1->Items->Strings[i] == ListBox2->Items->Values[login]) // ListBox2 = lista 2
   {
   return i;
   }
  }
  return -1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int index = GetSocketIndex("user3");
/* indeksy listy sÄ… liczone od 0, czyli 0, 1, 2, gdzie 0 zajmuje pierwsze
miejsce na liÅ›cie   */

ShowMessage("user3 ma IP: " + ListBox1->Items->Strings[index] +
" znajduje się na liście 1 na pozycji: " + (String)index); // komunikat zbędny pokazuje działanie funkcji

ServerSocket1->Socket->Connections[index]->SendText("wiadomość");
}
//---------------------------------------------------------------------------


i tak właśnie ma działać funkcja porównująca listy, żądnych gotowych kodów, żadnych komponentów.
Teraz stwórz sobie cały mechanizm tworzący listy, wysyłający zapytania od serwera do klienta, zwracający login i hasło przez klienta, tworzący listy, porównujący hasło z loginem. Stwórz wszystko w ten sam sposób w jaki ja stworzyłem kod porównujący zawartość list, czyli programując, a nie układając klocki, bo nie znajdziesz klocków na wszystko.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Koziol » Å›roda, 23 lipca 2008, 21:34

Czyli ListBox działa na zasadzię że wrzuca dane które mu podajemy w pierwsze wolne miejsce cyzli jak mamy zajęte miejsca o i ndex'ie 0,1,3,4,5,itd to przy dodawaniu wrzuci w pierwsze wole miejsce czyli pole o index'ie 2? Dobrze rozumiem ?

Za chwile to przetestuje.

PS: Gdzie można znaleźć opis do klasy związanej z ServerSocket? (wszystkich wartości, metod itd.)

EDIT: przetestowałem, działa jak należy.

Wydaje mi się jednak że lepszym rozwiązaniem tutaj będzie lista jedno kierunkowa nie mam racji ?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez wargo » czwartek, 24 lipca 2008, 10:03

Co do klasy socket:
wpisz w edytorze kodu w bcb nazwÄ™ komponentu potem -> i jak juz napiszesz > to pojawi siÄ™ lista wszystkich funkcji wraz z zwracanym typem i wymaganymi parametrami oraz ich typami.
DzielÄ… siÄ™ na property i function.
Property określa własciwos-jest to zwykła zmienna przechwujaca parametr a funkcja zwraca wartosc i wykonuje określone zadanie.
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Client/Server Socket "coÅ› ala ServerSide 1.6"

Nowy postprzez Koziol » czwartek, 24 lipca 2008, 10:54

Już wszystko sobie sprawdziłem, stworzenie listy jedno kierunkowej jest dużo prostszym i wydajniejszym rozwiązaniem.
Co do BCB od pół roku się w nim "bawie". Do tej pory programowałem w ANSI C.
Angielski nie jest problemem, jak zaczynałem moją znajomość z PHP dokumentacja była tylko po angielsku, czasy PHP 3.x...
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 10 gości

cron