daily pastebin goal
56%
SHARE
TWEET

Untitled

a guest Jan 23rd, 2019 57 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     #include <stdio.h>
  2.     #include <stdlib.h>
  3.     #include <unistd.h>
  4.     #include <errno.h>
  5.     #include <string.h>
  6.     #include <sys/types.h>
  7.     #include <sys/socket.h>
  8.     #include <netinet/in.h>
  9.     #include <arpa/inet.h>
  10.     #include <sys/wait.h>
  11.     #include <signal.h>
  12.     #include <pthread.h>  // dla wątków
  13.    
  14.     // funkcja wątku
  15. void *obsluga_servera (void *wzkaznik_des);
  16. int main()
  17.     {
  18.         int *new_sock;
  19.         int listenfd, connfd; // nasłuchiwanie na listenfd, nowe połaczenia na connfd
  20.  
  21.         socklen_t clilen;
  22.  
  23.         struct sockaddr_in servaddr, cliaddr;
  24.  
  25.         listenfd = socket (AF_INET,SOCK_STREAM,0); // tworzenie soceketa
  26.  
  27.                 if(listenfd == -1)
  28.                 {
  29.                     perror("Nie mozna stworzyc socketa \n");
  30.                 }  
  31.        
  32.         puts("socket stworzony");
  33.         bzero(&servaddr, sizeof (servaddr));
  34.        
  35.        
  36.         // Przygotuj strukturę sockaddr_in
  37.        
  38.         servaddr.sin_family = AF_INET;      // rodzina adresów służąca do określania typów adresu np protokół internetowy ipv4                                                                         
  39.         servaddr.sin_addr.s_addr = INADDR_ANY;  // zawiera adres serwera
  40.         servaddr.sin_port = htons(5000);                                                                               
  41.         if(bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) < 0)  // start serwera
  42.         {
  43.             perror("przypisanie bind nie udane");  // wydrukuj komunikat o błędzie
  44.             return 1;
  45.         }
  46.         puts("bind zostal przypisany");
  47.         listen(listenfd, 5);    // wywolanie funkcji listenfd.
  48.                                 // Liczba 5 określa ilość maksymalnych połączeń klienckich,
  49.                                 // gdzie serwer ustawia w kolejności do tego odsłuchu
  50.         puts("Oczekiwanie na polaczenie");
  51.         clilen = sizeof(cliaddr);
  52.        
  53.        
  54.          // // dołączanie , akceptacja klienta
  55.         while ((connfd = accept(listenfd,(struct sockaddr *)&cliaddr, &clilen)))  
  56.         {  
  57.             puts("Polaczenie zaakceptowane");
  58.             pthread_t server_thread; // tworzenie wątku
  59.             new_sock = malloc(1); // wczytanie // funkcja malloc zwraca wskaźnik do nowo przydzielonego bloku pamięci
  60.             *new_sock = connfd;// jeżeli nie stworzy to usun
  61.             pthread_create(&server_thread,NULL,obsluga_servera,(void*) new_sock); // zwraca wskaźnik NULL  i przechodzi do komunikatu bledu
  62.         }
  63.  
  64.         if (connfd < 0)
  65.         {
  66.             perror("Niezaakceptowano polaczenia"); //nie można utowrzyć wątku
  67.             return 1;
  68.         }
  69.         return 0;
  70.     }
  71.    
  72.  
  73. void *obsluga_servera (void *wzkaznik_des)
  74.     {
  75.         printf("witaj\n");
  76.         int sock = *(int *) wzkaznik_des;  // Uzyskaj deskryptor gniazda
  77.        
  78.         // Wysyłaj wiadomości do klienta
  79.         // Odbierz wiadomość od klienta
  80.        
  81.         int rozm_odczytu, rozm_zapisu;
  82.         char *message;
  83.         static char wiad_klienta[1000];
  84.         message = "\nWitaj serverze \n";
  85.  
  86.         static int send_once = 0;
  87.         if (send_once < 1)
  88.             {
  89.                 send_once++;   
  90.             }
  91.         while((rozm_odczytu = recv(sock,wiad_klienta,1000,0)) > 0)
  92.             {
  93.                 printf("odczytywanie rozmiaru %d \n", rozm_odczytu); // Wyślij wiadomość z powrotem do klienta
  94.                 write(sock,wiad_klienta,strlen(wiad_klienta));
  95.             }
  96.         if(rozm_odczytu == 0)
  97.         {
  98.             puts("client rozlaczony");
  99.             fflush(stdout);
  100.            
  101.         }
  102.         else if(rozm_odczytu == -1)
  103.         {
  104.             perror("odbior nie udal sie");
  105.            
  106.         }
  107.         free(wzkaznik_des);
  108.         return 0;  
  109.     }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top