Προς το περιεχόμενο

C-based Webserver


Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σε όλους,

 

φτιάχνω έναν c-based web server τύπου cilent/server και αντιμετωπίζω πρόβλημα στο κομμάτι του μηνύματος απόκρισης: http request. Συνδέω, δηλαδή, τον server με κάποιον browser και περιμένω ένα μήνυμα όπως αυτό εδώ ---> http://www.codeguru.com/cpp/i-n/internet/http/article.php/c8813/HTTP-Post-Using-C.htm αν κι εγώ ψάχνω την get method κι ύστερα την post. 

 

Αν κάποιος μπορεί να με βοηθήσει και να μου δείξει με ποιον τρόπο γίνεται αυτό ώστε να ξεκολλήσω είτε με κάποια πληροφορία, δείγμα κώδικα είτε με οτιδήποτε, ας το παραθέσει.

 

Θενκ γιού.

Δημοσ.

Που δυσκολευεσαι; Το να φτιαξειςεναν βασικο webserver σε c ειναι αρκετα ευκολο. Αρκει να ξερεις socket και string "management".

 

Η διαδικασια ειναι:

Ο browser στελνει στο server ενα get request και περιμενει απαντηση

GET / HTTP/1.1\r\n
Some headers.. 

Ο server (εσυ) επεξεργαζεσαι το πανω και απαντας πχ

HTTP/1.1 200 OK\r\n
Some headers\r\n
\r\n
αυτα που θελεις να δει ο browser

Αυτα. 

ΥΓ: Το νου σου, οι browser στελνουν 2 request στην αρχη. Το πρωτο ειναι για favicon. Εαν το get ειναι GET /favicon.ico τοτε στειλε πισω 404

  • Like 1
Δημοσ.

νομίζω τα κατάφερα, όμως δεν καταλαβαίνω γιατί δεν εμφανίζονται στο Request κάποια headers που θέλω, όπως για παράδειγμα το Keep-Alive, ή Referer ή το Accept-Charset.

Δημοσ.

Τι να σου πω, εμενα αυτα στελνει ο χρομ

Your environment has been set up for using Node.js 0.10.10 (ia32) and npm.

C:\Users\papi>node documents\js\me
/


{ host: '127.0.0.1:8050',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;
q=0.8',
  'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Ge
cko) Chrome/31.0.1650.63 Safari/537.36',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'el-GR,el;q=0.8,en;q=0.6' }


/favicon.ico


{ host: '127.0.0.1:8050',
  connection: 'keep-alive',
  accept: '*/*',
  'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Ge
cko) Chrome/31.0.1650.63 Safari/537.36',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'el-GR,el;q=0.8,en;q=0.6' }


Δημοσ. (επεξεργασμένο)

κι εμένα, οπότε το αφήνω.

 

το favicon.ico δεν το στέλνει καν ωστόσο γιατί το έχω ρυθμίσει στον Firefox οπότε δεν με ενδιαφέρει ιδιαίτερα.

Επεξ/σία από bubblegum
Δημοσ.

από ότι φαίνεται bubblegum κάνουμε την ίδια εργασία ;P απλά προσθέτεις "<form method=\"POST\">Find pattern <input type=\"text\" name=\"pattern\" value=\"\" /><input type=\"submit\" value=\"Find\"/><input type=\"reset\" value=\"Clear\"/></form>" στην αρχή του html κώδικα σου και ότι γράφουν πάνω στην μπάρα του search σου έρχεται σαν POST request. Γνωρίζει κανείς πως να κάνω την usr/bin/find να γράφει σε δικό μου buffer η file;

Δημοσ. (επεξεργασμένο)

ναι, το είχα κάνει αλλά δεν είχα προσέξει το terminal lol 

 

μέσω pipe θα το κάνεις αυτό με τη find, δες και τις σημειώσεις φροντιστηρίου αν δεν τις έχεις ήδη δει

 

πφ... εγώ έχω τώρα πρόβλημα στη προσπέλαση των subdirectories. Δεν μπορώ να τα προσπελάσω καθόλου, κάτι παίζει με το path. 

 

γνωρίζει κανείς πως μπορώ να αντικαταστήσω/μετατρέψω αυτές τις εντολές μπας και εμφανιστεί σωστά το path(βρίσκω το path με αυτό τον τρόπο)

 

char path[BUFFER_SIZE];

sscanf(reqbuff, "GET %s HTTP", path);

printf("Request: \"%s\"\n", path);

if((dir = opendir(path)) == NULL){

...

 

για να προσπελαύνω τα subdirectories; Τις εντολές τις έχω μέσα σε συνάρτηση-όρισμα της pthread_create(), δηλαδή εκτός main επομένως υποθέτω πως το argv[1] δεν μπορώ να το χρησιμοποιήσω(?)... 

 

υγ.επίσης δεν τα εκτυπώνει όλα τα directories όπως πρέπει

υγ.2 ενώ στον Chrome μου εμφανίζεται μια χαρά ο πίνακας με τις στήλες κλπ, στον φάιρφοξ μου εμφανίζεται η φόρμα html, όλο μεταφρασμένο σε html... wtf?

Επεξ/σία από bubblegum
Δημοσ.

Welcome στο "δεν υπαρχει crossplatform".

 

Τι θα εκανα εγω; (Μακαρονια) θα εβαζα σε καθε φακελο ενα αρχειο με ονομα... ξερωγω "folder.list"... και εκει (μεσα στο αρχειο) θα εγραφα το τι εχει ο καθε φακελος.

 

ετσι εαν ηθελα να δω τι εχει το /bar/foo/ θα ανοιγα το /bar/foo/folder.list το οποιο θα ειχε μεσα ξερωγω..

bar1
floder2
index.html
bar.html

Δημοσ.

 

υγ.2 ενώ στον Chrome μου εμφανίζεται μια χαρά ο πίνακας με τις στήλες κλπ, στον φάιρφοξ μου εμφανίζεται η φόρμα html, όλο μεταφρασμένο σε html... wtf?

 

Εβαλες το content-type: text/html (google it καλυτερα,  γιατι δεν θυμαμαι πως ακριβως ειναι)

Δημοσ. (επεξεργασμένο)

δεν έκανα τίποτα από τα δυο (είχα κάνει βλακεία δικιά μου) αλλά το έφτιαξα αυτό με τα directories, τα εκτυπώνει μια χαρά. Τα subdirectories πάλι @@ 

...καμμιά ιδέα για το path υπάρχει μπας και τα εμφανίσει τα διαολεμένα; ή ήταν κάτι από τα παραπάνω κι απλά δεν το κατάλαβα;

 

:wacko:

 

μισώ τη ζωή μου 

 

EDIT: Το πρόβλημα με τα subdirectories λύθηκε (περίπου), εκτός από εκείνα για τα οποία δεν έχω άδεια ή κάτι αντίστοιχο, στα οποία κολλάει. Αν υπάρχει κάποια σκέψη για αυτό, γιατί εγώ ακόμα δε βρήκα κάτι.

 

EDIT 2: Η απορία με τους browser λύθηκε επίσης, από το forum της σχολής. Χρειαζόταν η αρχή φόρμας με το εξής: "HTTP/1.1 200 OK\r\n\r\n<html>..." 

 

EDIT 3: Λύθηκε κι η απορία με το path... οι παραπάνω τύποι δουλεύουν μια χαρά για την εύρεσή του για όποιον ενδιαφέρεται, αλλού ήταν το πρόβλημά μου. 

 

---> Άρα επαναδιατυπώνω, το μόνο πρόβλημα εντοπίζεται για error της opendir που μπορεί να έχουμε μη προσπελάσιμα αρχεία κλπ. Anyway, θα το βρω, στον κώδικα της html είναι το πρόβλημα.

Επεξ/σία από bubblegum

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...