En el mundo actual, las redes informáticas desempeñan un papel importante en el campo de la transferencia de datos. Es un tema que todo programador debería conocer. En la red informática, la programación de sockets es uno de los temas más importantes en el mundo de la programación. En este tema, vamos a discutir la programación de sockets y los diferentes métodos de programación de sockets que se implementan en C++.
En C++, la programación de sockets es un método que combina dos o más nodos entre sí a través de una red para que los nodos puedan compartir los datos sin ninguna pérdida. En esta conexión, un nodo escucha un puerto que está conectado a una dirección IP particular. Cuando el cliente llega al servidor, el servidor crea el detector de socket.
¿Qué es un enchufe?
Entendamos el socket hablando con el ejemplo en tiempo real. Un socket es un tipo de medio que proporciona una conexión entre dos dispositivos. El enchufe puede ser un cargador de teléfono que proporciona la conexión entre el enchufe y el teléfono o el teléfono y esa computadora portátil. Con la ayuda de un socket se conectan diferentes aplicaciones a la red local con diferentes puertos. Cada vez que se crea el socket, el servidor especifica el programa, y ese programa especifica el socket y la dirección de dominio.
java booleano a cadena
El socket es un tipo de mecanismo que se utiliza para intercambiar datos entre diferentes procesos. Aquí estos procesos están presentes en diferentes dispositivos o en el mismo dispositivo que están conectados a través de una red. Una vez que se crea la conexión para el socket, los datos se pueden enviar en ambas direcciones y continúan hasta que uno de los puntos finales cierra la conexión.
Procedimiento en la Comunicación Cliente-Servidor
Hay algunos procedimientos que tenemos que seguir para establecer la comunicación cliente-servidor. Estos son los siguientes.
Etapas para la creación de sockets de servidor
Hay algunas etapas mediante las cuales podemos crear el socket para el servidor. Estos son los siguientes.
¿Qué es una conexión?
Una conexión es un tipo de relación entre dos máquinas en la que los dos software se conocen entre sí. Estos dos software saben cómo establecer una conexión entre sí; en otras palabras, podemos decir que estos dos software saben enviar los bits a través de la red. Una conexión del socket significa que las dos máquinas deben conocer toda la información entre sí, como el número de teléfono, la dirección IP y el puerto TCP.
1 a 100 número romano
Un socket es un tipo de objeto similar al archivo que permite al programa aceptar la conexión entrante y permitirle enviar o recibir la conexión entrante. Además, es un tipo de recurso asignado al proceso del servidor.
El servidor puede crear el socket con la ayuda de socket(). Este zócalo no se puede compartir con ningún otro procesador.
Etapas para el cliente
- El socket en el que los datos se pueden comunicar entre sí.
- El búfer de almacenamiento puede almacenar datos sobre la dirección, como addr_of_data y addr_of_buffer.
- Se ocupa del tamaño del búfer, como len_of_data y len_of_buffer.
- Se trata de la bandera que dice cómo se enviarán los datos.
Pasos para establecer la conexión en el socket
Establece una conexión entre los diferentes clientes y el servidor. Pero tanto el cliente como el servidor pueden manejar la conexión de socket. Cada proceso tiene que establecer una conexión para su propio socket.
Los pasos necesarios para establecer un socket en el lado del cliente son los siguientes:
- Crea un socket con la ayuda de una llamada al sistema socket().
- Luego tenemos que conectarnos con la dirección del socket del servidor con la ayuda de una llamada al sistema().
- Luego tenemos que enviar y recibir los datos. Podemos hacer esto de varias maneras. Podemos hacer esta función de lectura() y escritura().
Los pasos necesarios para establecer un socket en el lado del servidor son los siguientes:
Sitios web de películas similares a 123movies.
- Primero crea un socket con la ayuda de una llamada al sistema socket().
- Luego vincula el socket a una dirección con la ayuda de la llamada al sistema bind(). Una dirección consta de un número de puerto para el socket del servidor en la máquina host.
- Luego escucha la conexión con la ayuda de la llamada al sistema listening ().
- Luego, el servidor acepta la conexión entrante con la ayuda de la llamada al sistema aceptar(). También bloquea todos los comandos entrantes hasta que un cliente se conecta a un servidor.
- Luego comienza el proceso de envío y recepción de datos.
Conexión de varios clientes sin subprocesos múltiples
Hay varios ejemplos en los que vemos cómo un único usuario puede conectarse con el servidor. En el mundo de la programación actual, varios usuarios están conectados al servidor con diferentes sockets.
Hay varias formas de lograrlo. Uno de ellos es el multiproceso. Con la ayuda de subprocesos múltiples, podemos lograr esto. Podemos implementar un proceso de subprocesos múltiples con la ayuda de la función select().
Ejemplo:
Código para el cliente:
// 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)>