C ++ Web Development: volendo un inizio minimalista [chiuso]

8

Attualmente sto lavorando a una laurea in Informatica e voglio costruire la mia libreria Web Server. Il problema? Ogni ricerca che ho fatto sull'interazione con i siti web punta a "Utilizzare questa libreria creata da qualcun altro" - invece di spiegare le basi dell'invio e della ricezione delle informazioni.

Non sto chiedendo molto - voglio solo inserire un singolo carattere alfanumerico su una pagina web, premere un pulsante e avere quell'unico byte di informazioni inviato a un programma C ++, senza l'ausilio di un libreria non standard.

    
posta Christopher Ivey 16.07.2013 - 01:45
fonte

3 risposte

6

Boost.Asio è attualmente convertito in essere ( uno dei?) il futuro standard C ++ modo di fare networking. (Ecco uno dei documenti: link )

È davvero il sistema di comunicazione asincrono portatile più semplice che si possa trovare usando moderno C ++, come astratto di altre librerie di socket o di piattaforme fornite.

Tutte le moderne librerie di rete http di C ++ ( CppNetlib e CPPCMS ) si basa su di esso. Ti suggerisco di costruire la tua libreria intorno a fornire basi per socket e comunicazioni asincrone (e sincrone) ma non impostare un sistema completo per te. Forse in pochi anni puoi addirittura sostituire Boost.ASIO con l'equivalente standard C ++.

Inoltre, la documentazione di Boost.Asio fornisce informazioni su come funziona la comunicazione in questo tipo di contesto. Quindi leggerlo potrebbe rispondere a molte tue domande.

E se vuoi capire il livello più basso, leggi il codice Asio. È un po 'difficile da leggere se non sei abituato alla meta-programmazione C ++ e ad altri idiomi C ++ ma imparerai molto leggendolo.

    
risposta data 16.07.2013 - 09:42
fonte
2

Alcune delle informazioni di tye che desideri sono qui: link . Potrebbe non sembrare quello che stai cercando di fare è molto complicato, ma è un po 'più complicato di quanto tu possa pensare. Come ha detto Dominic, la parte difficile sarà l'apertura della porta e la lettura dal socket - abbastanza difficile in terra c ++.

Consiglio di iniziare, utilizzare un server Web esistente e scrivere il proprio modulo CGI. Il server Web si prenderà cura del lato socket delle cose e fondamentalmente stai solo leggendo i dati dalle variabili di ambiente o dagli argomenti della riga di comando (se si tratta di una richiesta GET) o dallo stdin se è un POST (penso, questo è dato dalla mia memoria che ha circa 15 anni). Quello che vuoi è qualcosa del genere:

#include <stdio.h>
#include <string.h>

int main(){
    char *s=getenv("CONTENT_LENGTH");
    int i=atoi(getenv("CONTENT_LENGTH"));
    printf("Content-type: text/html\n\n");
    printf("%s\n<br />",s); //Shows you CONTENT_LENGTH works
    printf("%d\n<br />",i); //Shows you it was converted to int
    char *tmp = new char[100];
    fread(tmp,i,1,stdin); //read from stdin something of i bytes to tmp
    printf("%s\n<br />",tmp);
    return 0;
}

BTW come lezione per il lettore questa applicazione ha un bug di overflow del buffer .. probabilmente vorrai risolvere il problema:)

    
risposta data 16.07.2013 - 02:25
fonte
1

Correggimi se ho torto, ma sembra che tu voglia programmare il tuo web server da zero, usando solo componenti C ++ standard.

Prima di tutto ci si trova un po 'in difficoltà poiché non esiste una libreria di socket tcp / ip standard, quindi sarà necessario utilizzare socket Windows o socket Posix a seconda della piattaforma.

Quindi dovrai ricercare il formato delle richieste / risposte. Sono sicuro che con un po 'di ricerca troverai una risorsa sul protocollo http.

Dopodiché dovrai creare un server in ascolto per le connessioni, rispondere alle richieste e inviare risposte.

Se questo non è ciò che stai chiedendo, allora il suggerimento di MichaelT sembra ragionevole.

    
risposta data 16.07.2013 - 02:22
fonte

Leggi altre domande sui tag