Bogusław Kempny

Serwer kamer

Autor adres
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 ....










Teraz zrobimy serwer nasłuchujący na wybranym porcie (przekazywanym jako parametr przy uruchomieniu naszego programu) ewentualnych próśb o zrobienie zdjęcia.

    int sockfd, newsockfd, portno, clilen;
    struct sockaddr_in serv_addr, cli_addr;
Tworzymy socket:
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
    {
        perror("ERROR opening socket");
        exit(1);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));

W zmiennej portno zapisujemy numer portu na którym nasz serwer ma nasłuchiwać:
    portno = atoi(argv[1]); //arbitralny zakres 5090 - 5099
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);
 
Adresujemy nasz socket:
    if (bind(sockfd, (struct sockaddr *) &serv_addr,
                          sizeof(serv_addr)) < 0)
    {
         perror("ERROR on binding");
         exit(1);
    }



I uruchamiamy nasz serwer, na wskazanym przez nas porcie bedzie sluchał próśb klientów:
Liczba 5 to długość kolejki klientów oczekujących na połączenie.
  listen(sockfd,5);
  clilen = sizeof(cli_addr);
    
  while (TRUE)
   {
I czekamy na klienta. Jak się pojawi, accept utworzy nowy socket (newsockfd), który będzie używany do komunikacji z tym klientem:
restart:
    newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, 
                                &clilen);

    if (newsockfd < 0) 
    {
        if (errno == EINTR) goto restart;
        perror("ERROR on accept");
        exit(1);
    }