Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> C /C + + Προγραμματισμός

Πώς να λάβετε ένα Εκκαθάριση Buffer Socket σε C

Κατά τη λήψη δεδομένων από μια πρίζα σε ένα buffer , είναι σημαντικό να ανιχνεύει πότε η υποδοχή κλείνει , έτσι ώστε να μην περιμένετε για επιπλέον πακέτα επ 'αόριστον . Το API των Windows Sockets ( Winsock ) παρέχει μια διεπαφή για το πρόγραμμά σας C να αλληλεπιδρούν με την υποκείμενη TCP /IP στοίβα πρωτοκόλλου . Συλλέξτε πληροφορίες του διακομιστή υποδοχής , δημιουργούν μια πρίζα , συνδέστε το με τον ξενιστή και στη συνέχεια να λάβει τα δεδομένα με τη λειτουργία " recv " σε ένα ρυθμιστικό μέχρι να λάβετε ένα μήνυμα σφάλματος ή το μήνυμα " TCP FIN " . Οδηγίες
Η

1 Ανοίξτε το αρχείο σας C σε έναν επεξεργαστή κειμένου , όπως το Microsoft Visual Studio Express . 2

Συμπεριλάβετε τις επικεφαλίδες που απαιτούνται για να εργαστεί με υποδοχές και τα αρχεία με την προσθήκη του παρακάτω κώδικα στην κορυφή του αρχείου σας :

# include

# include

# include

Η 3

Ανακτήστε τις πληροφορίες υποδοχής με τη λειτουργία " getaddrinfo " με την προσθήκη του παρακάτω κώδικα στη λειτουργία σας :

struct addrinfo υπαινιγμούς , * res ?

int sfd ?

char buffer [ 512 ] ?

int nrecv ?

memset ( & τους υπαινιγμούς , 0 , sizeof υποδείξεις ) ?

hints.ai_socktype = SOCK_STREAM ?

hints.ai_family = AF_UNSPEC ?

getaddrinfo ( " www.server.com " , " 3500 " , & τους υπαινιγμούς , & res ) ?

Αντικαταστήστε τη διεύθυνση υποδοχής του " www.server.com " και το λιμάνι του " 3500 " με τις πληροφορίες για το διακομιστή στο οποίο συνδέεστε . Η " SOCK_STREAM " τιμή δείχνει η υποδοχή θα χρησιμοποιήσει το πρωτόκολλο TCP , το οποίο είναι μια αξιόπιστη αμφίδρομη σύνδεση
Η 4

Δημιουργήστε μια υποδοχή με τις πληροφορίες υποδοχής με την προσθήκη του παρακάτω κώδικα : .

sfd = socket ( res - > ai_family , res - > ai_socktype , res - > ai_protocol ) ?
5

Συνδέστε την υποδοχή με τη λειτουργία " σύνδεση" , χρησιμοποιώντας τον περιγραφέα αρχείου από την " υποδοχή λειτουργία " , με την προσθήκη του παρακάτω κώδικα :

συνδεθεί ( sfd , res - > ai_addr , res - > ai_addrlen ) ?
Η 6

Ανοίξτε ένα αρχείο για να γράψετε με η " fopen " λειτουργία με την προσθήκη του παρακάτω κώδικα :

FILE * fp ?

fp = fopen ( " file.rar " , " wb ")?
Η 7

Λήψη πληροφοριών εντός του ρυθμιστικού με τη λειτουργία " recv " με την προσθήκη του παρακάτω κώδικα :

int num_written = 0 ?

ενώ ( ( nrecv = recv ( sfd , buffer , sizeof ρυθμιστικό , 0 ) ) > 0 ) {

char * pbuf = buffer?

ενώ ( nrecv > 0 ) {

num_written = fwrite ( pbuf , sizeof ( char ) , nrecv , fp ) ?

pbuf + = num_written ?

nrecv - = num_written ?

} }


Ο βρόχος θα συνεχίσουν να λαμβάνουν τις πληροφορίες μέχρι ένα σφάλμα, το οποίο επιστρέφει μια αρνητική τιμή , ή μέχρι να λάβει ένα μήνυμα " TCP FIN " , το οποίο έχει την τιμή 0 .
8

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

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα