Bogusław Kempny

Serwer kamer

×
Autor English
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 RFID Grafolog RCP Shutdown Temperatura ....










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