Posix Socket en C

Posix Socket en C

Dentro de la programación de socket, debemos tener dos nodos, yo.mi., cliente y servidor. Un punto final para la transmisión se conoce como un enchufe Posix o solo un enchufe. Para el remitente y el receptor, A y B, para interactuar entre sí, ambos lados primero deben crear un enlace a través de sus puntos finales particulares. Otro socket (punto final) busca el primer enchufe para generar un enlace, mientras que el primer socket responde en un cierto puerto en una dirección IP. Mientras que el cliente se acerca al servidor, el servidor genera el socket del oyente. En esta guía, explicaremos el uso de la función de enchufe desde la biblioteca POSIX de C mientras usa el Ubuntu 20.04 Sistema operativo Linux.

Lado del servidor:

Es necesario escribir código de cliente y servidor para la programación de socket. Un solo nodo o servidor puede tener varios clientes conectados a él. Los archivos de encabezado necesarios para emplear mientras se programan los enchufes se incluyen en las primeras ocho líneas. Al establecer el valor en 8080, definimos la variable global del puerto. Si el puerto 8080 no está disponible, podemos cambiarlo a cualquier otro puerto que sea.

Declaramos algunas variables de tipo entero en el método principal que usaremos más adelante. Estas variables incluyen las del descriptor del archivo del servidor (server_file_desc), el nuevo socket (new_socket) y el valor o mensaje leído del cliente (value_read). Las direcciones para la familia de direcciones de Internet se almacenan en una estructura de tipo sockaddr, que se declara en la línea después.

Más tarde, definimos la opción = 1, la longitud de la dirección = sizeof (Socket_address) y el búfer [1024], que inicialmente se establecieron en 0 y se usaron para mensajes recuperados de clientes de un tamaño de 1024 bytes. La variable de mensaje, que almacena el mensaje enviado por el servidor a los clientes conectados a ella, viene a continuación. En la siguiente línea, estamos creando un enchufe y pasándolo AF_INET (la familia de direcciones conocida como AF INET se utiliza para especificar los tipos de direcciones con las que su socket puede conectarse (en este caso, IP (Protocolo de Internet) V4/V6 ).

TCP es un protocolo de comunicación de transmisión que es un protocolo basado en la conexión. Una vez que se establece la conexión entre dos partes (cliente-servidor), la comunicación comienza hasta que la conexión es terminada o abortada por cualquiera de las dos partes o por algún tipo de error de conexión de red. Aquí está el complemento del código del lado del servidor escrito en el servidor.archivo c.

Ahora estamos uniendo con fuerza el enchufe al puerto 8080. Después de eso, inicializamos la familia, la dirección y el puerto del socket. Después de eso, vinculamos la dirección del socket al puerto 8080. Ahora el servidor está listo para escuchar cualquier conexión desde el cliente. Entonces imprimemos un mensaje antes del método de escucha. Cuando cualquier cliente se conecta al servidor que usa este puerto, el servidor aceptará la conexión del cliente.

Si el cliente y el servidor están conectados, el servidor leerá el mensaje del cliente usando un búfer y lo mostrará en la pantalla del terminal. Similar en cuanto a cómo los clientes reciben mensajes de los servidores, envíe métodos para transmitir un mensaje e información de socket a los clientes. El servidor luego muestra un mensaje de éxito antes de cortar la comunicación con el socket asociado. El servidor también cerró el puerto de socket de escucha en el servidor.

Lado del cliente:

La imagen de abajo muestra al cliente.Código de archivo C Fragmento:

El cliente se conecta al servidor usando un socket usando el método Connect (), y también pasamos la dirección del servidor. El cliente y el servidor pueden comunicarse una vez que la conexión se ha establecido de manera efectiva. Muestre un mensaje de falla en la pantalla Terminal si el servidor está inactivo o el cliente no puede conectarse por ningún otro motivo. Después de una conexión exitosa, el cliente usará un socket para enviar un mensaje al servidor, leer el mensaje desde el servidor usando un búfer en la variable de lectura de valor y mostrar la respuesta del servidor en la pantalla. El cliente luego apaga la comunicación con el enchufe vinculado.

Hemos compilado el servidor.C y cliente.archivos C usando el compilador GCC, y hemos guardado los resultados en el servidor.C y cliente.carpetas C. Los comandos para compilar el servidor y los archivos del cliente se enumeran a continuación.

Necesitábamos dos terminales distintas, una para el servidor y otra para el cliente, para ver la comunicación entre ellos. Presione Ctrl+Shift+N para iniciar un nuevo terminal en Ubuntu. Una cosa que debe tener en cuenta es que el servidor debe estar activo y esperar una conexión del cliente. Recibirá el error "Falló la conexión con el servidor" si el servidor está fuera de línea y no está conectado por ningún motivo, mientras que el cliente desea conectarse al servidor. El SNAP a continuación muestra este error:

Cuando ejecutamos el archivo de salida del servidor, el servidor esperará a que el cliente se conecte antes de que los dos puedan comunicarse. Simplemente escriba ./Servidor en el terminal recién abierto para iniciar el servidor. Aquí hay una captura de pantalla que muestra que el servidor está en funcionamiento y listo para aceptar conexiones de los clientes:

Es hora de iniciar el cliente ahora mismo. Para iniciar la comunicación entre el cliente y el servidor, escriba "/Cliente" en un nuevo terminal. Luego, el servidor responde y envía un mensaje, que el cliente lee, almacena en una variable de mensaje y se muestra utilizando una instrucción Printf. El mensaje del cliente se mostró en la pantalla del terminal a continuación.

Cuando un cliente se adjunta a un servidor, el servidor acepta un mensaje para verificar la conexión. Por lo tanto, el mensaje del cliente se muestra en la pantalla a continuación. Después de eso, el servidor notificará al cliente y mostrará un mensaje de éxito. Después de esta comunicación exitosa, el servidor termina o aborta la conexión con el cliente.

Conclusión:

Hemos terminado con suficientes explicaciones y demostraciones de programación de sockets en el cliente y del lado del servidor utilizando la biblioteca POSIX del idioma C. Hemos explicado brevemente los lados de código de la programación de socket y esperamos que aprenda de los ejemplos.