In der heutigen Welt spielen Computernetzwerke eine wichtige Rolle im Bereich der Datenübertragung. Es ist ein Thema, das jeder Programmierer kennen sollte. Unter dem Computernetzwerk ist die Socket-Programmierung eines der wichtigsten Themen in der Programmierwelt. In diesem Thema besprechen wir die Socket-Programmierung und die verschiedenen Methoden der Socket-Programmierung, die in C++ implementiert sind.
In C++ ist die Socket-Programmierung eine Methode, die zwei oder mehr Knoten über ein Netzwerk miteinander verbindet, sodass die Knoten die Daten ohne Datenverlust gemeinsam nutzen können. Dabei lauscht ein Knoten auf einem Port, der mit einer bestimmten IP-Adresse verbunden ist. Wenn der Client den Server erreicht, erstellt der Server den Socket-Listener.
Was ist eine Steckdose?
Lassen Sie uns den Socket anhand eines Echtzeitbeispiels verstehen. Ein Socket ist eine Art Medium, das eine Verbindung zwischen zwei Geräten herstellt. Bei der Steckdose kann es sich entweder um ein Telefonladegerät handeln, das die Verbindung zwischen der Steckdose und dem Telefon herstellt, oder zwischen dem Telefon und dem Laptop. Mit Hilfe eines Sockets werden unterschiedliche Anwendungen über unterschiedliche Ports an das lokale Netzwerk angeschlossen. Jedes Mal, wenn der Socket erstellt wird, gibt der Server das Programm an, und dieses Programm gibt den Socket und die Domänenadresse an.
Der Socket ist eine Art Mechanismus, der zum Datenaustausch zwischen verschiedenen Prozessen verwendet wird. Dabei sind diese Prozesse entweder in verschiedenen Geräten vorhanden oder im selben Gerät, die über ein Netzwerk verbunden sind. Sobald die Verbindung für den Socket hergestellt ist, können die Daten in beide Richtungen gesendet werden und werden fortgesetzt, bis einer der Endpunkte die Verbindung schließt.
Vorgehensweise in der Client-Server-Kommunikation
Es gibt einige Verfahren, die wir befolgen müssen, um eine Client-Server-Kommunikation herzustellen. Diese lauten wie folgt.
Phasen für die Server-Socket-Erstellung
Es gibt einige Phasen, in denen wir den Socket für den Server erstellen können. Diese lauten wie folgt.
SMTP-Internetprotokoll
Was ist eine Verbindung?
Eine Verbindung ist eine Art Beziehung zwischen zwei Maschinen, bei der die beiden Softwareprogramme voneinander wissen. Diese beiden Softwareprogramme wissen, wie sie eine Verbindung zueinander herstellen. Mit anderen Worten: Wir können sagen, dass diese beiden Softwareprogramme wissen, wie die Bits über das Netzwerk gesendet werden. Eine Verbindung des Sockets bedeutet, dass die beiden Maschinen alle Informationen untereinander kennen sollten, wie z. B. die Telefonnummer, die IP-Adresse und den TCP-Port.
Ein Socket ist ein Objekttyp, der einer Datei ähnelt und es dem Programm ermöglicht, die eingehende Verbindung zu akzeptieren und die eingehende Verbindung zu senden oder zu empfangen. Außerdem handelt es sich um einen Ressourcentyp, der dem Serverprozess zugewiesen ist.
Der Server kann den Socket mit Hilfe von socket() erstellen. Dieser Sockel kann nicht mit einem anderen Prozessor geteilt werden.
Bühnen für den Kunden
- Der Socket, über den die Daten miteinander kommuniziert werden können.
- Der Speicherpuffer kann Daten über die Adresse speichern, z. B. addr_of_data und addr_of_buffer.
- Es befasst sich mit der Größe des Puffers, wie len_of_data und len_of_buffer.
- Es handelt sich um das Flag, das angibt, wie die Daten gesendet werden.
Schritte zum Herstellen der Verbindung im Socket
Es stellt eine Verbindung zwischen den verschiedenen Clients und dem Server her. Aber sowohl der Client als auch der Server können die Socket-Verbindung verarbeiten. Jeder Prozess muss eine Verbindung für seinen eigenen Socket herstellen.
Die Schritte zum Einrichten eines Sockets auf der Clientseite sind wie folgt:
- Es erstellt einen Socket mit Hilfe eines socket()-Systemaufrufs.
- Dann müssen wir uns mit Hilfe eines system()-Aufrufs mit der Socket-Adresse des Servers verbinden.
- Dann müssen wir die Daten senden und empfangen. Wir können dies auf verschiedene Arten tun. Wir können diese read()- und write()-Funktion ausführen.
Die Schritte zum Einrichten eines Sockets auf der Serverseite sind wie folgt:
- Zunächst wird mit Hilfe eines socket()-Systemaufrufs ein Socket erstellt.
- Anschließend bindet es den Socket mit Hilfe des Systemaufrufs bind() an eine Adresse. Eine Adresse besteht aus einer Portnummer für den Server-Socket im Host-Computer.
- Dann lauscht es mit Hilfe des Systemaufrufs listen() auf die Verbindung.
- Anschließend akzeptiert der Server die eingehende Verbindung mit Hilfe des Systemaufrufs „accept()“. Außerdem werden alle eingehenden Befehle blockiert, bis ein Client mit einem Server verbunden ist.
- Dann beginnt der Prozess des Sendens und Empfangens von Daten.
Mehrere Clients ohne Multithreading verbinden
Es gibt verschiedene Beispiele, in denen wir sehen, wie sich ein einzelner Benutzer mit dem Server verbinden kann. In der heutigen Programmierwelt sind mehrere Benutzer über unterschiedliche Sockets mit dem Server verbunden.
Es gibt verschiedene Möglichkeiten, dies zu erreichen. Einer davon ist Multithreading. Mit Hilfe von Multithreading können wir dies erreichen. Mithilfe der Funktion select() können wir einen Multithreading-Prozess implementieren.
Beispiel:
Code für den Kunden:
// Client side C/C++ program to demonstrate Socket // programming #include #include #include #include #include #define PORT 8080 int main(int argc, char const* argv[]) { int sock = 0, valread, client_fd; struct sockaddr_in serv_addr; char* hello = 'Hello from client'; char buffer[1024] = { 0 }; if ((sock = socket(AF_INET, SOCK_STREAM, 0)) <0) 0 8080 { printf(' socket creation error '); return -1; } serv_addr.sin_family="AF_INET;" serv_addr.sin_port="htons(PORT);" convert ipv4 and ipv6 addresses from text to binary form if (inet_pton(af_inet, '127.0.0.1', &serv_addr.sin_addr) <="0)" printf( ' invalid address not supported ((client_fd="connect(sock," (struct sockaddr*)&serv_addr, sizeof(serv_addr))) 0) printf(' connection failed send(sock, hello, strlen(hello), 0); printf('hello message sent '); valread="read(sock," buffer, 1024); printf('%s ', buffer); closing the connected close(client_fd); 0; code for server: server side c c++ program demonstrate programming #include #define port int main(int argc, char const* argv[]) server_fd, new_socket, valread; struct sockaddr_in address; opt="1;" addrlen="sizeof(address);" buffer[1024]="{" }; char* hello="Hello from server" ; creating file descriptor ((server_fd="socket(AF_INET," sock_stream, 0)) perror('socket failed'); exit(exit_failure); forcefully attaching (setsockopt(server_fd, sol_socket, so_reuseaddr | so_reuseport, &opt, sizeof(opt))) perror('setsockopt'); address.sin_family="AF_INET;" address.sin_addr.s_addr="INADDR_ANY;" address.sin_port="htons(PORT);" (bind(server_fd, sockaddr*)&address, sizeof(address)) perror('bind (listen(server_fd, 3) perror('listen'); ((new_socket="accept(server_fd," (socklen_t*)&addrlen)) perror('accept'); send(new_socket, close(new_socket); listening shutdown(server_fd, shut_rdwr); pre> <p> <strong>Compiling:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-2.webp" alt="Socket Programming in C/C++"> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-3.webp" alt="Socket Programming in C/C++"> <h2>Uses of Socket Programming</h2> <p>Socket programs are used to communicate between various processes, usually running on different systems. It is mostly used to create a client-server environment. This post provides the various functions used to create the server and client program and an example program.</p> <p>In the example, the client program sends a file name to the server, and the server sends the contents of the file back to the client. Socket programming usually pertains to basic communication protocols like TCP/UDP and raw sockets like ICMP. These protocols have a small communication overhead when compared to underlying protocols such as HTTP/DHCP/SMTP etc.</p> <p> <strong>Some of the basic data communications between the client and server are:</strong> </p> <ul> <li>File Transfer: Sends name and gets a file.</li> <li>Web Page: Sends URL and gets a page.</li> <li>Echo: Sends a message and gets it back.</li> </ul> <h2>Disadvantages</h2> <ul> <li>C++ can establish communication only with the machine requested and not with any other machine on the network.</li> <li>Sockets allow only raw data to be sent. This means that the client and server need mechanisms to interpret the data.</li> </ul> <hr></0)>