Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    6

    [c/c++] socket per richieste a server cgi

    ciao a tutti, sto facendo un programma c/c++ sotto linux-embedded per comandare una camera ip. La camera ip è una sony e accetta comandi cgi.
    Io ho creato una socket che si connette all'indirizzo ip della camera ma nn so come inviare i comandi get e post, qualcuno sa dirmi come fare?


    il protocollo della camera è di questo tipo:

    <Method>
    GET/POST

    <syntax>
    http://ip_adr/command/visca-inquiry.cgi?visca=<InquiryCommand>

    <example>
    The following example shows the inquiry of the current D-Zoom mode.
    POST /command/visca-inquiry.cgi HTTP/1.1\r\n
    Host: 192.168.1.1\r\n
    Connection: Keep-Alive\r\n
    Cache-Control: no-cache\r\n
    Content-Length: 16\r\n
    \r\n
    VISCA=81090406FF


    response data (D-Zoom On)
    HTTP/1.1 200 OK\r\n
    Content-Type: text/plain\r\n
    Content-Length: 8\r\n
    Server: NetEVI/X.XX
    \r\n
    905002FF

  2. #2
    Così ad occhio sembrerebbero normalissime richieste HTTP. Leggiti la sua RFC.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    6
    io ho provato a fare così, ma nn funziona, ho letto RFC ma nn capisco ancora cosa faccio di sbagliato, la socket viene aperta collegata al server, spedisco la richiesta ma nn ricevo nessuna risposta

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <netinet/in.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <sys/socket.h>
    #include <errno.h>


    // Porta per la comunicazione
    #define PORT 80

    // Inizializzazione della variabile sockaddr_in
    void addr_init (struct sockaddr_in *addr, int port, long int ip) {
    addr->sin_family=AF_INET;
    addr->sin_port = htons ((u_short) port);
    addr->sin_addr.s_addr=ip;
    }

    main(int argc, char **argv) {
    int i,sd;
    int var1,var2,var3,var4;
    int sock_size=sizeof(struct sockaddr_in);
    int N,status;
    pid_t pid;
    struct sockaddr_in server;
    char header[]="GET /image?speed=20 HTTP/1.1\r\n Host: 81.208.56.91";
    int k,g;
    char risp[]="";

    // Controllo che vengano passati almeno due argomenti
    if (argc<2) {
    printf ("%s <server>\n",argv[0]);
    exit(1);
    }

    // Controllo che l'IP del server passato sia un indirizzo IPv4 valido
    if (sscanf(argv[1],"%d.%d.%d.%d",&var1,&var2,&var3,&var4) != 4) {
    printf ("%s non è un indirizzo IPv4 valido\n",argv[1]);
    exit(2);
    }

    // Inizializzazione dell'indirizzo
    addr_init (&server,PORT,inet_addr(argv[1]));

    // Creazione del socket
    if ((sd=socket(AF_INET,SOCK_STREAM,0))<0) {
    printf ("Impossibile creare un socket TCP/IP\n");
    exit(3);
    }else{printf("socket creata\n");}

    // Creazione della connessione
    if (connect(sd, (struct sockaddr*) &server, sock_size)<0) {
    printf ("Impossibile collegarsi al server %s sulla porta %d: errore %d\n",
    inet_ntoa(server.sin_addr.s_addr),PORT,errno);
    exit(4);
    }

    printf ("Connessione stabilita con successo con il server %s sulla porta %d\n",
    inet_ntoa(server.sin_addr.s_addr), ntohs(server.sin_port));





    //spedisco la richesta sulla socket
    k= send (sd, header, sizeof(header), 0);

    printf ("comando inviato spediti %d caratteri\n", k);

    usleep(1000000);

    g=recv(sd, risp,k,0);
    printf("risp di %d caratteri %s\n",g, risp);



    // Chiusura della connessione
    close(sd);
    exit(0);
    }

  4. #4
    La richiesta deve essere così:
    codice:
    GET /image?speed=20 HTTP/1.1\r\nHost: 81.208.56.91\r\n\r\n
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    6
    grazie !!!!
    ora funziona

  6. #6
    Di niente; alla prossima!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.