UNIX DOMAIN SOCKET USAGE

UNIX DOMAIN SOCKET USAGE
“Quando os dados precisam ser trocados entre os processos em execução no mesmo sistema operacional host, um soquete de domínio UNIX (UDS) é introduzido como o terminal de comunicação de dados. O soquete de comunicação entre processos, geralmente conhecido como UDS, é um tipo de soquete IPC. Os processos em execução na mesma CPU podem se comunicar efetivamente devido a soquetes de domínio Unix. Use a função do soquete e Af_unix como domínio do soquete para estabelecer um soquete de domínio UNIX. Um soquete de domínio UNIX deve estar vinculado a um caminho de arquivo específico usando a função de ligação depois de ser criada. Para se comunicar efetivamente entre os processos no mesmo computador, a família AF_UNIX (comumente referida como af_local) é implementada.”

No passado, os soquetes de domínio Unix não eram identificados ou vinculados a um nome do sistema do sistema de arquivos. Neste artigo, discutiremos o uso do soquete do Domínio UNIX.

Vamos ver um exemplo em que usamos a família de domínio do soquete AF_UNIX para executar a comunicação entre o cliente e o servidor. Podemos executar vários clientes novamente em um único servidor, mas para fins de demonstração, apenas usamos o único cliente conectado a um servidor. Nesse caso, dois processos diferentes, um em execução para o servidor e outro em execução para um cliente, estão se comunicando no mesmo computador para o qual o soquete do Domínio UNIX é usado. Crie um arquivo usando o vim editor e nomeie o servidor1.C, mas você pode usar o Nano ou qualquer outro editor.

Digite as linhas subsequentes de código no arquivo quando estiver aberto no modo de inserção (Escape + I). Primeiro, defina a variável de nome do soquete, eu.e., o nome do soquete de comunicação. No diretório temporário, adicionamos o arquivo de soquete. As linhas de código subsequentes vêm antes da função principal, incluindo os arquivos de cabeçalho necessários. O nome do soquete variável estrutural do tipo Sockaddr_un é declarado. Crie quatro variáveis ​​do tipo inteiro a ser usado posteriormente. A criação do soquete do servidor e da comunicação do canal foi dividida nas etapas a seguir:

1. Usando a chamada do Sistema Socket () e a bandeira AF Unix, o servidor cria um soquete de domínio UNIX. As chamadas futuras do sistema podem ser feitas usando o descritor de arquivo que esse método retorna. A variável de soquete de conexão, que é um descritor de arquivo de servidor, é testada na declaração condicional para ver se ele contém -1, que denota que o processo de construção do soquete falhou.

2. Em seguida, devemos usar a função portátil do MEMSET para limpar completamente a memória. Defina o nome da família do soquete para AF Unix depois disso.

3. Para o cliente se conectar, o servidor liga o soquete a um endereço bem conhecido usando a chamada do sistema bind (), mas antes disso, copie o soquete_name para o soquete_name.Variável Sun_Path usando o método de cópia de string (strcopy). Usando o resultado de retorno em uma expressão condicional, determinamos se a chamada do sistema de ligação foi bem -sucedida ou não.

4. A chamada do sistema listen () é usada pelo servidor para designar um soquete como passivo ou como aquele que aceitará solicitações de conexão recebidas de clientes.

5. O cliente envia mensagens individuais para cada uma de suas entradas da linha de comando. O servidor calcula as somas de mensagens recebidas. A string de comando "end/enter" é enviada pelo cliente. O servidor responde com uma mensagem que contém os números inteiros do cliente adicionados. Depois de imprimir a soma dos valores de entrada em resposta pelo servidor, o cliente sai. Tão rapidamente quanto um novo cliente associado, o servidor espera usando o loop. O parâmetro "Down" pode ser usado para encerrar o servidor quando o cliente é invocado.

6. A escuta de conexão é feita no primeiro para o loop, enquanto as operações de leitura e gravação são invocadas no segundo loop. Ao enviar mensagens para os clientes, o servidor emprega a chamada do sistema de escrita.

7. Depois disso, o soquete de pares pode ser alcançado através das funções do sistema read () e write () (i i.e., para se comunicar entre o servidor e o cliente).

8. Por fim, o servidor deve chamar o método Close () para fechar a conexão depois de acessar o soquete.

Use o comando indicado na captura de tela para compilar o código no Linux usando o compilador GCC. Este comando cria um arquivo de saída nomeado para servidor.

Aqui está o código do arquivo do lado do cliente na linguagem de programação C. O nome do soquete usado no arquivo do servidor também é necessário para a comunicação. Crie um soquete de domínio UNIX depois de importar os arquivos de cabeçalho necessários, usando a mesma abordagem que no arquivo do servidor. O código REST é semelhante ao cliente usando a chamada do sistema Write () para enviar entrada para o servidor. Os parâmetros no cabeçalho da função principal são usados ​​para ler as entradas da linha de comando e depois as escrevemos usando um loop for para transmitir ao servidor. Aguarde a resposta do servidor usando o método de leitura após uma operação de gravação bem -sucedida. O método de leitura mantém a resposta do servidor em um buffer e o exibe na tela. Feche a conexão do soquete após esta comunicação.

Vamos examinar como o servidor e o cliente interagem. Para fazer isso, precisaremos de dois terminais, onde devemos primeiro executar o arquivo de saída do servidor antes de iniciar o cliente e enviar entradas para o servidor. O cliente sai depois de ler e exibir a resposta do servidor.

Caso o endereço de ligação já esteja em uso, neste caso, use o SO_REUSEADDR como a opção de soquete.

Se o servidor estiver offline e um cliente quiser se conectar, a saída seria como a abaixo.

Se um cliente não fornecer nenhum número de entrada:

Se o cliente entrar em um número enquanto se comunica com o servidor, o servidor adicionará os números e responderá ao cliente exibindo o resultado.

Para desligar o servidor a pedido do cliente

Conclusão

Neste artigo, demonstramos o uso do lado do cliente e do servidor para utilizar o soquete de domínio UNIX. Para isso, tentamos o código C simples para ambos os lados no sistema operacional Kali Linux. Esperamos que você obtenha uma boa ajuda deste artigo.