datanet Δημοσ. 21 Ιανουαρίου 2004 Δημοσ. 21 Ιανουαρίου 2004 Θελω να φτιαξω ενα προγραμμα που να κατεβαζει αρχεια απο Web Server, κατι απλουστερο απο Getright. Πιστευω οτι θα συνδεεται στο server, port:80, και θα κανει GET /a.html HTTP/1.1, και ο server θα του στελνει το αρχειο. Εκανα κατι τετοιο αλλα δεν πετυχαινει. Μηπως δεν ειναι τοσο απλο? :?:
HaPagan Δημοσ. 21 Ιανουαρίου 2004 Δημοσ. 21 Ιανουαρίου 2004 Φαντάζομαι ότι δουλεύεις με sockets . Το δοκίμασα και εγώ αλλά δεν λειτουργεί . Κάτι παραπάνω βασικά θα θέλει. Η σύνδεση με το socket πραγματοποιείται επιτυχώς ;
lanista Δημοσ. 23 Ιανουαρίου 2004 Δημοσ. 23 Ιανουαρίου 2004 Λοιπόν έχουμε και λέμε : ( υποθέτω ότι δουλεύετε σε Windoze και C/C++) Βήμα πρώτο : Αρχικοποίηση του Winsock Βήμα δεύτερο : Δημιουργία socket Βήμα τρίτο : connect στην πόρτα 80 Βήμα τέταρτο : Υποβολή αίτησης . Βήμα πέμπτο : λήψη του αρχείου Λοιπόν τα πρώτα 3 βήματα είναι τετριμένα . Αυτό που αξίζει να σχολιάσω είναι η υποβολή της αίτησης . Το πρωτόκολλο HTTP ορίζει πολλά πεδία/εντολές τα οποία χρησιμοποιεί ο agent για να υποβάλει μία αίτηση σε κάποιον server . πχ αν κάποιος θέλει να κατεβάσει μία σελίδα και θέλει να πάρει κείμενο φωτογραφίες εικόνες κτλ πρέπει να εμπεριέχει εκτός από την εντολή GET και την εντολή Accept : Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Αυτές οι "εντολές" αποκαλούνται tags και ορίζονται από όλα τα RFC που σχετίζονται έμμεσα ή άμμεσα με το πρωτόκολλο HTTP . Όταν λοιπόν τώρα θα πατήσω εγώ click για να ποστάρω την απάντηση μου η εντολή που υποβάλλει ο browser στον server είναι κάτι σαν και αυτό ( καλά στην συγκεκριμένη περίπτωση είναι πολύ διαφορετικό λόγω php αλλά λέμε τώρα ..... ) : Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Language: el Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Host: 145.12.34.123 Connection: Keep-Alive Cache-Control: no-cache POST /kapou HTTP/1.1 Τα διαφορετικά πεδία χωρίζονται μεταξύ τους με CRLF ( carriage return / line feed ) ενώ το τελευταίο ΤΑG πρέπει να ακολουθείται απο ΔΥΟ CRLF για να υποδηλώνεται ότι η εντολή τελείωση και δεν ακολουθούν άλλα πεδία.Επίσης αν κάποιο πεδίο παραλείπεται το πρωτόκολλο χρησιμοποιεί το default. Δεν είναι απαραίτητα όλα τα πεδία Συνεπώς εσείς στο πρόγραμμα σας αν θέλετε να κατεβάσετε το αρχείο ας πούμε to XXX.html από εκεί που έχετε συνδεθεί θα πρέπει να στείλετε μέσω του send τον buffer o οποίος θα περιέχει (ακριβώς όπως σας δείχνω ) το string : "GET /ΧΧΧ.html HTTP/1.0 \r\n\r\n" Προσέξτε το τέλος του string .... είναι τα δύο CRLF που σας είπα πριν ... Τώρα πως λαμβάνετε το αρχείο .... Όπως καταλαβένετε δεν θα λάβετε το αρχείο ολόκληρο με το πρώτο recv αν το τελικό πακέτο που είναι payload+HTTP Header+IP header είναι μεγαλύτερο από το MTU του δικτύου . Για αυτό τον λόγο πρέπει να κάνετε το εξής . Θα διαβάζετε συνέχεια μέχρι να μην σας στέλνει ο server άλλα bytes στο socket , κάπως έτσι : do { bytesRead = recv(socket, buffer, sizeof(buffer), 0); fwrite(buffer,sizeof(char),bytesRead,fp); } while(bytesRead!=0); Για οποιεσδήποτε άλλες απορίες διαβάστε τα RFC . ( Δεν υπάρχει κάτι που δεν υπάρχει εκεί !!!! ) .
HaPagan Δημοσ. 23 Ιανουαρίου 2004 Δημοσ. 23 Ιανουαρίου 2004 Oraios ! Mipos ksereis esi i kapoios allos pos ginetai to download tou arxeiou se java ; Tha voithouse poli mias kai ksero kalitera java apo oti c kai tha me dieukoline poli !
Dionisos Δημοσ. 23 Ιανουαρίου 2004 Δημοσ. 23 Ιανουαρίου 2004 Gia Java des edw: http://java.sun.com/docs/books/tutorial/networking/urls/index.html oson afora to networking kai gia arxeia edw: http://java.sun.com/docs/books/tutorial/essential/io/index.html Ola afta fysika sto Java tutorial Filika Dionisos
drm Δημοσ. 24 Ιανουαρίου 2004 Δημοσ. 24 Ιανουαρίου 2004 παιδιά, έχω κάτι έτοιμο σε Delphi, αλλά θέλει αρκετό ψάξιμό για να καταλάβεις τι παίζει, βασίζετε σε API των Windows... Αν θέλετε, μπορώ να σας στείλω το unit με κάνα mail ή να το postαρω εδώ, αλλά είναι κομματί σκληρό...
HaPagan Δημοσ. 24 Ιανουαρίου 2004 Δημοσ. 24 Ιανουαρίου 2004 drm eyxaristome poli alla theloume na asxolithoume me sockets kai java/c opote ...
drm Δημοσ. 24 Ιανουαρίου 2004 Δημοσ. 24 Ιανουαρίου 2004 ΟΚ, απλά να προτείνο κάτι. Αν δουλέυετε με C/C++ σε περιβάλλον Windows, τότε μπορεί να χρησιμοποιήσετε το WinInet API, το οποίο είναι ένα επίπεδό πάνω από τα sockets.
datanet Δημοσ. 4 Φεβρουαρίου 2004 Μέλος Δημοσ. 4 Φεβρουαρίου 2004 Ρε παιδια, πετυχαινει ...και ο webserver στελνει το αρχειο, αλλα αμα ειναι πανω απο π.χ. 40KB τοτε δεν παιρνει καποια τελευταια Bytes. Π.χ. 36 KB απο 40 KB, 416KB απο 422KB. Μου βγαζει ενα λαθος...που απο οτι καταλαβαινω μαλλον εγινε disconnect. Τι λετε να φταιει? Πως μπορω να πω εγω ποτε θα γινει το disconnect.?
drm Δημοσ. 5 Φεβρουαρίου 2004 Δημοσ. 5 Φεβρουαρίου 2004 Θα ελεγε ότι στο loop που δέχεσαι τα πακετα, χάνεις το τελευταίο. Πρόσεξε, λογικά το τελευταίο πακέτο δεν έχει το ίδιο μέγεθος με τα προηγούμενα αλλά μικρότερο... Καλή επιτυχία
datanet Δημοσ. 5 Φεβρουαρίου 2004 Μέλος Δημοσ. 5 Φεβρουαρίου 2004 το υλοποιησα σε VB6.0 και επειδη εβλεπα συνεχεια το μεγεθος των πακετων που ερχοταν, δεν εχει νοημα να το προσεχω αυτο γιατι ειναι σε καθε πακετο επαιζε το μεγεθος. Βεβαια ειναι μικρο οπως λες...... ...κατι αλλο παιζει! Καμια φορα ειναι ΟΚ και καμια φορα μπαρουφες....! Μηπως να τα παρατησω και να παω για κανα χειροφρενο!!!!!
vtsib Δημοσ. 5 Φεβρουαρίου 2004 Δημοσ. 5 Φεβρουαρίου 2004 Είχα υλοποιήσει κάτι παρόμοιο παλιότερα.Είχα κάνει ένα POP client σε UNIX περιβάλλον σε C. To μυστικό εδώ ειναι το RFC.Eκεί μέσα τα λέει όλα. Επίσης όποιος ενδοιφέρεται για socket programming στην C σε περιβάλλον UNIX ασ διαβάσει αυτό, ίσως το καλύτερο στο internet: http://www.ecst.csuchico.edu/~beej/guide/net/html/ bye bye
datanet Δημοσ. 6 Φεβρουαρίου 2004 Μέλος Δημοσ. 6 Φεβρουαρίου 2004 Ok ....με λιγη επιμονη εκατσα και βρηκα τι εφταιγαι!!!Τωρα ειμαι ενταξει
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.