En el món actual, les xarxes informàtiques juguen un paper important en el camp de la transferència de dades. És un tema que cada programador ha de conèixer. Sota la xarxa informàtica, la programació de socket és un dels temes més importants del món de la programació. En aquest tema, estem fent una discussió sobre la programació de sockets i els diferents mètodes de programació de sockets que s'implementa en C++.
En C++, la programació de socket és un mètode que combina dos o més nodes entre si a través d'una xarxa perquè els nodes puguin compartir les dades sense cap pèrdua de dades. En aquesta connexió, un node escolta un port que està connectat a una adreça IP determinada. Quan el client arriba al servidor, el servidor crea l'escolta de socket.
Què és un Socket?
Entenem el sòcol parlant de l'exemple en temps real. Un endoll és un tipus de mitjà que proporciona una connexió entre dos dispositius. L'endoll pot ser un carregador de telèfon que proporciona la connexió entre l'endoll i el telèfon o el telèfon i aquest ordinador portàtil. Amb l'ajuda d'un sòcol, diferents aplicacions es connecten a la xarxa local amb diferents ports. Cada vegada que es crea el sòcol, el servidor especifica el programa, i aquest programa especifica el sòcol i l'adreça del domini.
barra d'adreces de Chrome
El sòcol és un tipus de mecanisme que s'utilitza per intercanviar dades entre diferents processos. Aquí aquests processos estan presents en diferents dispositius o en el mateix dispositiu que estan connectats a través d'una xarxa. Un cop creada la connexió per al sòcol, les dades es poden enviar en ambdues direccions i continuar fins que un dels punts finals tanca la connexió.
Procediment en comunicació client-servidor
Hi ha alguns procediments que hem de seguir per establir la comunicació client-servidor. Aquestes són les següents.
Etapes per a la creació del sòcol del servidor
Hi ha algunes etapes per les quals podem crear el sòcol per al servidor. Aquestes són les següents.
Què és una connexió?
Una connexió és un tipus de relació entre dues màquines on es coneixen els dos programaris. Aquests dos programes saben com establir una connexió entre ells; és a dir, podem dir que aquests dos programes saben com enviar els bits per la xarxa. Una connexió del sòcol significa que les dues màquines haurien de conèixer tota la informació entre elles, com ara el número de telèfon, l'adreça IP i el port TCP.
inurl:.git/head
Un sòcol és un tipus d'objecte que és similar al fitxer que permet al programa acceptar la connexió entrant i els permet enviar o rebre la connexió entrant. A més, és un tipus de recurs assignat al procés del servidor.
El servidor pot crear el sòcol amb l'ajuda del sòcol (). Aquest sòcol no es pot compartir amb cap altre processador.
Etapes per al client
- El sòcol on es poden comunicar les dades entre si.
- La memòria intermèdia d'emmagatzematge pot emmagatzemar dades sobre l'adreça, com ara addr_of_data i addr_of_buffer.
- S'ocupa de la mida del buffer, com len_of_data i len_of_buffer.
- Tracta la bandera que diu com s'enviaran les dades.
Passos per establir la connexió al sòcol
Estableix una connexió entre els diferents clients i el servidor. Però tant el client com el servidor poden gestionar la connexió del sòcol. Cada procés ha d'establir una connexió per al seu propi sòcol.
Els passos necessaris per establir un sòcol al costat del client són els següents:
- Crea un sòcol amb l'ajuda d'una crida al sistema socket().
- Aleshores ens hem de connectar amb l'adreça de socket del servidor amb l'ajuda d'una trucada a system().
- Després hem d'enviar i rebre les dades. Ho podem fer de diverses maneres. podem fer aquesta funció de llegir () i escriure ().
Els passos necessaris per establir un sòcol al costat del servidor són els següents:
model tcp ip
- Primer crea un sòcol amb l'ajuda d'una trucada al sistema socket().
- A continuació, enllaça el sòcol a una adreça amb l'ajuda de la crida al sistema bind(). Una adreça consisteix en un número de port per al sòcol del servidor a la màquina host.
- A continuació, escolta la connexió amb l'ajuda de la trucada del sistema d'escolta ().
- Aleshores, el servidor accepta la connexió entrant amb l'ajuda de la trucada al sistema accept(). També bloqueja totes les ordres entrants fins que un client estigui connectat a un servidor.
- Aleshores comença el procés d'enviament i recepció de dades.
Connectar diversos clients sense multithreading
Hi ha diversos exemples en què veiem com un sol usuari es pot connectar amb el servidor. En el món de la programació actual, diversos usuaris estan connectats al servidor amb diferents endolls.
Hi ha diverses maneres d'aconseguir-ho. Un d'ells és el multithreading. Amb l'ajuda del multithreading, ho podem aconseguir. Podem implementar un procés multithreading amb l'ajuda de la funció select().
Exemple:
Codi per al client:
// 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)>