Skocz do zawartości

komunikator - rozsylanie ramek


Viper

Recommended Posts

CZe..

Mam pytanie.... W jaki sposob zrobic rozsylenie informacji do calej sieci (lokalnej) w momencie uruchomiania komunikatora??? Chodzi mi o to, zeby inne osoby widzialy ze jestem dostepny.. Albo jesli wydzielam serwer do ktorego klienci sie loguja - to jak rozeslac do wszystkich ze ktos jest dostepny / niedostepny??????

Z gory dziekuje za wszelka pomoc...

Link do komentarza
Udostępnij na innych stronach

Skoro robisz serwer do którego logują się klienci to przecież on zapamiętuje kto jest dostępny, a kto nie i może to rozesłać do wszystkich klientów.

W jaki sposob zrobic rozsylenie informacji do calej sieci (lokalnej)

Mozesz uzyc adresu 255.255.255.255 plus UDP. Jest to ograniczony broadcast, nie wyjdzie poza twoją sieć lokalną

Link do komentarza
Udostępnij na innych stronach

Po pierwsze uzywasz WinSOcket czy komponetów C++Bulidera??
Zreszta idea jest taka. W momecie gdy klient polaczy sie z serwerem to klient powinien wyslac paczke z potrzebnymi informacjami np z ksywka, swoj nr itp. Gdy serwer dostanie taka paczke sprawdza w bazie (np tablica struktur) czy taki klient o tym numerze isnieje jesli istnieje to wysyla teraz do wszystkich zalogowanych klientow (lub tylko tym ktorzy maja go dodanego do listy komunikatora) paczke z informacja ze ktos sie dolaczyl wraz z jego numerem.
Jak sprawdzic czy jaksi klient jest zalogowany? Prosto - przeszukujesz swoja baze danych (np tablice) i sprawdzasz który klient jest zalogowany (bo przy kazdym zalogowaniu klienta, serwer powinien uaktualniac baze i zmieniac jakas wartosc ktora jest odpowiedzialna za to czy klient jest zalogowany czy nie, np BOOL Zalogowany; - jesli ta zmienna jest TRUE to jest zalogowany a jak nie to nie) i potem mozesz spokojnie wysylac paczki tylko do tego który jest zalogowqany czyli do tego który ma np zmienna Zalogowany ustawiona na TRUE.
Aha i w tej strukturce najlepiej jeszcze przechowywac jaksi uchwyt do połączenia klienta. Walne tutaj taki troche pseudokod:

typedef struct UZYTKOWNIK
{
  Ksywka char[16];
  nr: int;
  bool zalogowany;
  JakisUchyt;
};

UZYTKOWNIK users[10];
UZYTKOWNIK user;

[...]
WM_ODBIERZ_PACZKE:
  bool UzytkownikOKej = FALSE;

  odczytaj_paczke(&user);

  for(int i=0; i<10; i++)
    if(user.nr==users[i].nr)
    {
       users[i].zalogowany = true;
       UzytkownikOKej = TRUE;
       break;
    }

  if(UzytkownikOKej)
  {
    for(i=0; i<10; i++)
      if(user.nr!=users[i].nr && users[i].zalogowany)
        WyslijPaczke(users[i].JakisUchwyt, JakasPaczkaZInformacjamiOZalogowaniuNowegoUsera);
      {
  }
}
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...