En el pasado, los enchufes de dominio UNIX no estaban identificados o vinculados a un nombre de ruta del sistema de archivos. Dentro de este artículo, discutiremos el uso del enchufe de dominio Unix.
Veamos un ejemplo en el que utilizamos la familia AF_UNIX Socket Domain para realizar la comunicación entre el cliente y el servidor. Podemos ejecutar varios clientes nuevamente en un solo servidor, pero para fines de demostración, solo usamos el cliente único conectado a un servidor. En este caso, dos procesos diferentes, uno que se ejecutan para el servidor y otro que se ejecuta para un cliente, se están comunicando en la misma computadora para la cual se usa el socket de dominio UNIX. Cree un archivo usando el editor VIM y nombrarlo servidor1.c Pero puedes usar nano o cualquier otro editor.
Escriba las líneas de código posteriores en el archivo cuando esté abierto en modo de inserción (Escape + I). Primero, defina la variable del nombre del socket, yo.mi., el nombre del enchufe de comunicación. En el directorio temporal, hemos agregado el archivo de socket. Las líneas de código posteriores vienen antes de la función principal, incluidos los archivos de encabezado necesarios. Se declara la variable estructural de nombre de enchufe de tipo sockaddr_un. Cree cuatro variables del tipo entero que se utilizará más tarde. La creación del socket del servidor y la comunicación del canal se ha dividido en los siguientes pasos:
1. Usando la llamada del sistema Socket () y el indicador AF Unix, el servidor crea un socket de dominio UNIX. Las llamadas del sistema futuras se pueden hacer utilizando el descriptor de archivo que este método devuelve. La variable de socket de conexión, que es un descriptor de archivo del servidor, se prueba en la declaración condicional para ver si contiene -1, que denota que el proceso de construcción de socket falló.
2. A continuación, debemos usar la función de memset portátil para borrar completamente la memoria. Establezca el apellido del socket en AF Unix después de eso.
3. Para que el cliente se conecte, el servidor vincula el socket a una dirección conocida utilizando la llamada del sistema bind (), pero antes de eso, copie el Socket_Name en el Socket_Name.variable sun_path usando el método de copia de cadena (strCopy). Usando el resultado de retorno en una expresión condicional, determinamos si la llamada del sistema de enlace fue exitosa o no.
4. El servidor utiliza la llamada del sistema Listen () para designar un socket como pasivo o como uno que acepte solicitudes de conexión entrantes de los clientes.
5. El cliente envía mensajes individuales para cada una de sus entradas de línea de comandos. El servidor calcula las sumas de los mensajes entrantes. El cliente envía la cadena de comando "End/Enter". El servidor responde con un mensaje que contiene los enteros del cliente agregados juntos. Después de imprimir la suma de los valores de entrada en respuesta por el servidor, el cliente sale. Tan rápido como un nuevo cliente asociado, el servidor espera usando el bucle. El parámetro "abajo" se puede usar para terminar el servidor cuando se invoca el cliente.
6. La escucha de conexión de conexión se realiza en el primer bucle, mientras que las operaciones de lectura y escritura se invocan en el segundo bucle. Al enviar mensajes a los clientes, el servidor emplea la llamada del sistema de escritura.
7. Después de eso, se puede llegar al zócalo de pares a través de las funciones del sistema Read () y Write () (I.mi., para comunicarse entre el servidor y el cliente).
8. Finalmente, el servidor debe llamar al método Cerrar () para cerrar la conexión después de que se acceda al accidente.
Use el comando indicado en la captura de pantalla para compilar el código en Linux usando el compilador GCC. Este comando crea un archivo de salida con nombre de servidor.
Aquí está el código del archivo del lado del cliente en el lenguaje de programación C. El nombre del socket utilizado en el archivo del servidor también es necesario para la comunicación. Cree un socket de dominio UNIX después de importar los archivos de encabezado necesarios, utilizando el mismo enfoque que en el archivo del servidor. El código REST es similar al cliente que usa la llamada del sistema Write () para enviar la entrada al servidor. Los parámetros en el encabezado de la función principal se utilizan para leer las entradas de la línea de comando, y luego los escribimos usando un bucle for para transmitir al servidor. Espere la respuesta del servidor utilizando el método de lectura después de una operación de escritura exitosa. El método de lectura mantiene la respuesta del servidor en un búfer y luego la muestra en la pantalla. Cierre la conexión del socket después de esta comunicación.
Examinemos cómo interactúan el servidor y el cliente. Para hacer esto, necesitaremos dos terminales, donde primero debemos ejecutar el archivo de salida del servidor antes de iniciar el cliente y enviar entradas al servidor. El cliente sale después de leer y mostrar la respuesta del servidor.
En caso de que el enlace de enlace ya esté en uso, en este caso, use SO_REUSeaddr como opción Socket.
Si el servidor está fuera de línea y un cliente quiere conectarse, la salida sería como la siguiente.
Si un cliente no proporciona ningún número de entrada:
Si el cliente ingresa a un número mientras se comunica con el servidor, el servidor agregará los números y responderá al cliente mostrando el resultado.
Para cerrar el servidor a la solicitud del cliente
Conclusión
En este artículo, hemos demostrado el uso del lado del cliente y del lado del servidor para utilizar el socket de dominio UNIX. Para esto, hemos probado el código C simple para ambos lados en el sistema operativo Kali Linux. Esperamos que obtenga una buena ayuda de este artículo.