Skocz do zawartości

komunikator - rozsylanie ramek


Recommended Posts

Napisano

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...

Napisano

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ą

Napisano

Skoro i tak bedzie mial serwer to nei widze sensu rozglaszanie sie broadcastem. Porostu kazdy kilent zna adres serwera to po wlaczeniu laczy sie z serwerem i po polaczeniu serwer automatycznie rozsyla jakas konkretna wiadomosc do innych dostepnych klientow.

Napisano

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);
      {
  }
}

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...