Für TCP Client-Seite:
Verwenden gethostbyname DNS-Namen zu IP-Lookup, wird es eine hostent Struktur zurück. Nennen wir diesen zurückgegebenen Werthost.
hostent *host = gethostbyname(HOSTNAME_CSTR);
die Struktur Socket-Adresse, geben Sie bitte:
sockaddr_in sock;
sock.sin_family = AF_INET;
sock.sin_port = htons(REMOTE_PORT);
sock.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr;
einen Socket erstellen und rufen Sie an:
s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr *)&sock, sizeof(sock))
Für TCP Server-Seite:
Einrichtung eine Buchse
Binden Sie Ihre Adresse mit Bind an diesen Socket.
Beginnen Sie mit auf diesem Sockel hören hören
Anruf einen angeschlossenen Client bekommen akzeptieren. < - An dieser Stelle spawnen Sie einen neuen Thread, um die Verbindung zu handhaben, während Sie einen weiteren Anruf tätigen, um den nächsten verbundenen Client zu akzeptieren.
Allgemeine Kommunikation:
Verwenden Sende- und recv lesen und zwischen dem Client und dem Server zu schreiben.
Quellcode Beispiel für BSD-Sockets:
Sie können einige gute Beispiel-Code von diesem Baby in wikipedia finden.
Weiterführende Literatur:
ich sehr empfehlen this book und this online tutorial:
4:
RAW-Buchsen sind sehr schwierig und unterscheiden sich auf verschiedenen Systemen ein wenig. Ich kenne nur Leute, die sie benutzen, um Sniffer zu codieren (wie 'wireshark') und einige ziemlich arkane Diagnosen. Sie sind sicherlich kein guter Ort, um Socket-Programmierung zu lernen. In den meisten Fällen bedeutet "Ich bin ein beginnender C++ Programmierer/Netzwerkadministrator" bedeutet "Bleib weg von SOCK_RAW". –
@ChuckKollars, stimme ich nicht zu. Ich denke, rohe Sockets zu lernen ist eine großartige Möglichkeit, C++ zu lernen, und besonders C. Eine Bibliothek zu benutzen ist eine Sache, aber rohe Sockets mit Linux sind eine sehr aufschlussreiche Erfahrung. C++ kann so viele einzigartige Dinge tun. Ich denke, es ist ein Fehler, den Herzschmerz zu vermeiden, den du implizierst. – motoku
Welches System haben Sie genau? "Raw" Socket-Implementierungen unterscheiden sich erheblich von einem System zum nächsten, so dass das, was Sie lernen (wirklich hauptsächlich über das System, nicht über C++), nicht anderswo übertragen wird. –