Soquete posix em c

Soquete posix em c

Na programação do soquete, devemos ter dois nós, eu.e., cliente e um servidor. Um terminal para a transmissão é conhecido como soquete Posix ou apenas um soquete. Para remetente e receptor, A e B, interagirem entre si, esses dois lados devem primeiro criar um link em seus pontos de extremidade específicos. Outro soquete (endpoint) procura o primeiro soquete para gerar um link, enquanto o primeiro soquete responde em uma determinada porta em um endereço IP. Enquanto o cliente se aproxima do servidor, o servidor gera o soquete do ouvinte. Neste guia, explicaremos o uso da função de soquete da biblioteca Posix de C enquanto usará o Ubuntu 20.04 Sistema operacional Linux.

Lado do servidor:

Escrever o código do cliente e do servidor é necessário para a programação do soquete. Um único nó ou servidor pode ter vários clientes conectados a ele. Os arquivos de cabeçalho necessários para empregar enquanto os soquetes de programação estão incluídos nas oito primeiras linhas. Ao definir o valor para 8080, definimos a variável global do porto. Se a porta 8080 não estiver disponível, podemos trocá -lo por qualquer outra porta que seja.

Declaramos algumas variáveis ​​do tipo inteiro no método principal que usaremos mais tarde. Essas variáveis ​​incluem as do descritor de arquivo do servidor (server_file_desc), o novo soquete (new_socket) e o valor ou mensagem lida do cliente (value_read). Os endereços para a família de endereços da Internet são armazenados em uma estrutura de tipo Sockaddr, que é declarada na linha depois.

Posteriormente, definimos opção = 1, comprimento de endereço = sizeof (soket_address) e buffer [1024], que foram inicialmente definidos como 0 e foram usados ​​para mensagens recuperadas de clientes de um tamanho de 1024 bytes. A variável de mensagem, que armazena a mensagem enviada pelo servidor para os clientes conectados a ele, vem a seguir. Na próxima linha, estamos criando um soquete e passando -o AF_INET (a família de endereços conhecida como AF INET é usada para especificar os tipos de endereços com os quais seu soquete pode se conectar (neste caso, IP (Internet Protocol) V4/V6 endereços ).

O TCP é um protocolo de comunicação de transmissão que é um protocolo baseado em conexão. Depois que a conexão é estabelecida entre duas partes (cliente-servidor), a comunicação começa até que a conexão seja encerrada ou abortada por qualquer uma das duas partes ou por algum tipo de erro de conexão de rede. Aqui está o snap do código lateral do servidor escrito no servidor.Arquivo C.

Agora estamos conectando com força o soquete à porta 8080. Depois disso, inicializamos a família, endereço e porto do soquete. Depois disso, ligamos o endereço do soquete à porta 8080. Agora o servidor está pronto para ouvir qualquer conexão do cliente. Então, imprimimos uma mensagem antes do método de escuta. Quando qualquer cliente se conecta ao servidor usando esta porta, o servidor aceita a conexão do cliente.

Se o cliente e o servidor estiverem conectados, o servidor lerá a mensagem do cliente usando um buffer e exibirá na tela do terminal. Semelhante como como os clientes recebem mensagens dos servidores, enviam métodos para transmitir uma mensagem e informações de soquete para os clientes. O servidor exibe uma mensagem de sucesso antes de cortar a comunicação com o soquete associado. O servidor também fechou a porta do soquete de escuta no servidor.

Lado do cliente:

A imagem abaixo mostra o cliente.C Snippet de código de arquivo:

O cliente se conecta ao servidor usando um soquete usando o método Connect () e também passamos pelo endereço do servidor. O cliente e o servidor podem se comunicar assim que a conexão for estabelecida efetivamente. Exiba uma mensagem de falha na tela do terminal se o servidor estiver inativo ou o cliente não conseguir se conectar por qualquer outro motivo. Após uma conexão bem -sucedida, o cliente usará um soquete para enviar uma mensagem para o servidor, ler a mensagem do servidor usando um buffer na variável de leitura de valor e exibir a resposta do servidor na tela. O cliente então desliga a comunicação com o soquete vinculado.

Nós compilamos o servidor.C e cliente.arquivos c usando o compilador GCC e salvamos os resultados no servidor.C e cliente.C Pastas. Os comandos para compilar os arquivos do servidor e do cliente estão listados abaixo.

Precisávamos de dois terminais distintos, um para o servidor e outro para o cliente, para ver a comunicação entre eles. Pressione Ctrl+Shift+N para iniciar um novo terminal no Ubuntu. Uma coisa que você deve ter em mente é que o servidor deve estar ativo e aguardar uma conexão do cliente. Você receberá o erro "A conexão com o servidor falhou" se o servidor estiver offline e não estiver conectado por qualquer motivo, enquanto o cliente quiser se conectar ao servidor. O snap abaixo mostra este erro:

Quando executamos o arquivo de saída do servidor, o servidor aguardará o cliente se conectar antes que os dois possam se comunicar. Simplesmente digite ./Servidor no terminal recém -aberto para iniciar o servidor. Aqui está uma captura de tela mostrando que o servidor está em funcionamento e pronto para aceitar conexões de clientes:

É hora de começar o cliente agora. Para iniciar a comunicação entre o cliente e o servidor, digite "/cliente" em um novo terminal. O servidor responde e envia uma mensagem, que o cliente lê, armazena em uma variável de mensagem e exibe usando uma instrução printf. A mensagem do cliente foi exibida na tela do terminal abaixo.

Quando um cliente se anexa a um servidor, o servidor aceita uma mensagem para verificar a conexão. A mensagem do cliente é, portanto, mostrada na tela abaixo. Depois disso, o servidor notificará o cliente e exibirá uma mensagem de sucesso. Após essa comunicação bem -sucedida, o servidor termina ou aborta a conexão com o cliente.

Conclusão:

Terminamos explicações e demonstrações suficientes de programação de soquete no cliente e no lado do servidor usando a biblioteca Posix da linguagem C. Explicamos brevemente os lados do código da programação do soquete e esperamos que você aprenda com os exemplos.