Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[Linux]Klient w multicast

#1
[Linux]Klient w multicast
Witam
Napisałem program klient na Linux. Mam związane z nim kilka pytań.
1. Czy dobrze stworzyłem wątek do wysyłania i odbierania?
2. W jaki sposób wysłać zapytanie do serwera o dołączenie się do serwera?
Oto kod klienta:
Kod:
#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <ncurses.h>

#include <unistd.h>

#include <pthread.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

  

#define SERVER_UDP_PORT    15005

#define SERVER_ADDR "10.0.11.43"

#define MY_HOST_ADDR "10.0.11.46"

#define DESTINATION_MCAST  "234.5.6.7"



WINDOW *big_win;

int sockfd, result, flags = 0, cli_len;

  struct sockaddr_in my_addr, cli_addr;



typedef struct point{

    int x;

    int y;

}POINT;

POINT kursor;



void gotoxy(int x, int y)

   {

      wmove(big_win, y, x);

   }



void clrscr(void)

  {

   wclear(big_win);

  }


  void* ssend()
  {
    result = sendto(sockfd, &kursor, sizeof(POINT), flags,

                  (struct sockaddr *) &cli_addr, cli_len);

    if(result < 0)

        {

             perror("recvfrom");

             printf("errno=%d\n",errno);

             wrefresh(big_win);

        }

        printf("sendto, result =%d\n", result);

  }

  void* receipt()
  {
       cli_len = sizeof(struct sockaddr);

      
       result = recvfrom(sockfd, &kursor, sizeof(POINT), flags,

                     (struct sockaddr *) &cli_addr, &cli_len);

       if(result < 0)

       {

            perror("recvfrom");

            printf("errno=%d\n",errno);
        wrefresh(big_win);

       }

       else

       {
        wclear(big_win);

        gotoxy(kursor.x, kursor.y);

            wrefresh(big_win);
       }
}

int main(int argc, char *argv[])

{    

  int res, res2,resu, resu2;

  int key;

  pthread_t      action_thr, action_thr2;      //watek

  pthread_attr_t action_thr_attr, action_thr_attr2;  //atrybuty watku





  initscr();

  start_color();

  init_pair(1, COLOR_WHITE, COLOR_BLACK);

  init_pair(2, COLOR_BLACK, COLOR_WHITE);

  init_pair(3, COLOR_WHITE, COLOR_BLACK);

  init_pair(4, COLOR_BLACK, COLOR_WHITE);

  
  cbreak();

  keypad(stdscr,TRUE);

  noecho();

  refresh();

  big_win = newwin(0,0,0,0);

  clrscr();

  wrefresh(big_win);



  kursor.x = 1;

  kursor.y = 1;

    

  //int sockfd, result, flags = 0, cli_len;

  //struct sockaddr_in my_addr, cli_addr;



  struct ip_mreqn group;

  

  char buffer[20];  

  

  sockfd = socket (PF_INET, SOCK_DGRAM, 0);



  if(sockfd < 0)

   {

    printf("socket failed\n");

    exit(0);

   }



  my_addr.sin_family      = AF_INET;

  my_addr.sin_addr.s_addr = inet_addr(MY_HOST_ADDR);  

  my_addr.sin_port        = htons(SERVER_UDP_PORT);  

  //bzero(&(my_addr.sin_zero), 8);

  

  setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,NULL,0);



  result = bind(sockfd,

               (struct sockaddr *) &my_addr,

                sizeof(struct sockaddr));  



  cli_len = sizeof(struct sockaddr);



  cli_addr.sin_family      = AF_INET;

  cli_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR);   //  inet_addr(DESTINATION_      T);      

  cli_addr.sin_port        = htons(SERVER_UDP_PORT);  

  bzero(&(cli_addr.sin_zero), 8);



  for(;;)

  {            

    key = getch();

    switch(key)
        {

             case KEY_UP: kursor.y--; break;

             case KEY_LEFT: kursor.x--; break;

             case KEY_RIGHT: kursor.x++; break;

             case KEY_DOWN: kursor.y++; break;

        }

    wclear(big_win);

        wrefresh(big_win);



  pthread_attr_init(&action_thr_attr2);
  pthread_attr_setdetachstate(&action_thr_attr2,  PTHREAD_CREATE_DETACHED);
  resu2 = pthread_create(&action_thr2,
                       &action_thr_attr2,
               receipt, NULL);

  pthread_attr_init(&action_thr_attr);
  pthread_attr_setdetachstate(&action_thr_attr,       PTHREAD_CREATE_DETACHED);
  resu = pthread_create(&action_thr,
                       &action_thr_attr,
               ssend, NULL);  

   }//nieskonczona petla for

  return 0;

}
 System operacyjny: linux Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([Linux]Klient w multicast)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  C++ Serwer Klient Laczenie sie za pomoca IP Drakhtul 0 2959 16.01.2014, 19:53
Ostatni post: Drakhtul
  [c,linux] klient-serwer wysyłanie->odczytanie->sprawdzanie->wysyłanie poczatkujacy1990 2 5126 22.11.2012, 01:10
Ostatni post: poczatkujacy1990
  C# gra multiplayer - klient/serwer Neomex Cpp 3 4666 07.09.2011, 19:02
Ostatni post: Ajgor

Skocz do:


Wybrane wątki ([Linux]Klient w multicast)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  C++ - sens pogłębiania nauki gbr 5 8711 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 8388 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 7526 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 10834 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 7970 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 8428 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 9844 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 8724 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 9469 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 8772 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 9479 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 12132 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 9929 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 11049 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 9985 21.09.2018 16:58
Ostatni post: DonCorleone