Sockets στην C/C++

Giorgos Keramidas keramida at ceid.upatras.gr
Mon Feb 13 10:12:27 EET 2006


On 2006-02-13 09:57, William Wallace <vplia at otenet.gr> wrote:
> Καλημέρα σε όλους σας!

Καλημέρα,

Πρώτα από όλα, το subject σου αναφέρει και τη C και τη C++.
Προσοχή, γιατί όσες παπαριές και να λέει ο Bjarne Strousstrup,
αυτές οι δύο είναι πολύ διαφορετικές γλώσσες.  Μην τις μπερδεύεις
ποτέ χωρίς να υπάρχει καλός και σοβαρός λόγος, θα την πατήσεις
άσχημα.

> Μήπως ξέρει κανείς πώς δημιουργούμε ένα socket στην C?

Αν μιλάς για UNIX περιβάλλοντα, που είναι μάλλον προφανές σε αυτή
τη λίστα[1], τότε ένα socket μπορείς να το δημιουργήσεις με την
κλήση συστήματος socket(2):

    int sd;

    sd = socket(PF_INET, SOCK_STREAM, 0);
    if (sd == -1) {
        /* Error */
    }

Προσοχή, γιατί ακόμα δεν μπορείς να 'γράψεις' τίποτα σε αυτό το
socket.  Πρέπει να το συνδέσεις σε κάποιο remote host/port,
π.χ. με την connect(2), πριν να είναι δυνατόν αυτό.

[1] Αν και δεν είναι υποχρεωτικό, αφού η C τρέχει και σε
περιβάλλοντα τα οποία λίγο σχέση έχουν με το UNIX και τα sockets
του BSD socket API.

> Το πρόβλημα που έχω να λύσω είναι ότι έχς ένα IP και θέλω να εκτυπώσω
> κάτι στην πόρτα 80 π.χ. του συγκεκριμένου IP.
>
> Θέλω δηλαδή να φτιάξω έναν στοιχείδη user-agent (ή browser αν to θέλετε).

Χρειάζεσαι οπωσδήποτε κάποιο tutorial για BSD sockets.

Στο Google θα βρεις ένα δισεκατομμύριο οδηγούς.

Στα καλά βιβλιοπωλεία, θα βρεις πολύ ωραία βιβλία, όπως το "UNIX
Network Programming" του Richard Stevens.

Σε open source εφαρμογές, θα βρεις έτοιμα παραδείγματα.  Για
παράδειγμα, μπορείς να διαβάσεις τον κώδικα μιας πλήρους
εφαρμογής με χρήση sockets, της `netcat', εδώ:

    http://www.freebsd.org/cgi/cvsweb.cgi/src/contrib/netcat/

Καλό διάβασμα :)




More information about the Hellug mailing list