Nisso tutorial,
vou explicar como como a comunicação servidor-cliente usa TCP/IP. Eu já expliquei sobre soquete e Como criar soquete no Linux. Antes da explicação, vamos ver algumas visões básicas da terminologia.
Três coisas principais são necessárias para estabelecer a conexão entre os modelos servidor-cliente:
1) Protocolo de transporte (TCP ou UDP)
2) Soquete
3) Endereço IP e porta
Protocolo de transporte (TCP):
TCP é um protocolo orientado a conexão que significa protocolo de controle de transferência. É um protocolo confiável e seguro. No TCP, o receptor pode gerar a confirmação do pacote recebido, portanto o remetente (cliente) precisa aguardar uma confirmação e se a resposta não vier ou algum erro de pacote for gerado, ele será reenviado para o cliente.
Soquete:
O soquete é uma conexão de ponto final para comunicação entre duas máquinas. É como um caminho de conectividade de dados entre dois terminais sem fio. O soquete é necessário em ambos os lados do servidor e do cliente. Você pode consultar o tutorial
soquete e
Como criar soquete no Linux.
Endereço IP e porta
O endereço IP é um endereço numérico exclusivo de cada computador e dispositivo. Ele desempenha um papel importante no domínio da rede com protocolo da Internet. No modelo servidor-cliente, o servidor precisa saber qual dispositivo está conectado a ele e com quem o servidor estabelece a conexão. O endereço IP desempenha um papel importante na comunicação entre modelos servidor-cliente.
Em termos de rede, a porta é o local para onde as informações são enviadas. Vários protocolos atribuem diferentes números de porta. Um número de porta específico é necessário para a comunicação entre servidor-cliente de acordo com o protocolo usado.
Vamos verificar como obter o endereço IP do usuário. Digite o seguinte comando no terminal de comando:
ifconfig
Ele exibe informações de rede como endereço, pacote de dados, etc. Certifique-se de qual tipo de conexão com a Internet está em seu sistema.
O endereço IP do sistema está localizado por
“inet endereço”. É o endereço IP do seu sistema.
Por exemplo, endereço inet: xxx.xx.xx.xx
Aqui, x representa o valor numérico.
Servidor – Comunicação Cliente usando TCP/IP
O modelo servidor-cliente é o modelo de comunicação para compartilhar o recurso e fornecer o serviço para diferentes máquinas. Servidor é o principal sistema que fornece os recursos e diversos tipos de serviços quando o cliente solicita utilizá-lo.
Vejamos, comunicação servidor-cliente através de programação de soquete usando TCP/IP. Achei que você conhecesse a programação C básica e o soquete. Por favor, consulte o tutorial
soquete e
Como criar soquete no Linux antes de aprender este tutorial.
Comunicação servidor-cliente usando TCP/IP
As seguintes tarefas são realizadas no lado do cliente:
• Crie um soquete para comunicação
• Configure o protocolo TCP com endereço IP do servidor e número da porta
• Conecte-se ao servidor através de soquete
• Aguarde a confirmação do servidor
• Enviar mensagem para o servidor
• Receber mensagem do servidor
As seguintes tarefas são realizadas no lado do servidor:
• Crie um soquete para comunicação
• Vincule a porta local e o endereço de conexão
• Configure o protocolo TCP com número de porta
• Ouvir a conexão do cliente
• Aceitar conexão do cliente
• Enviar confirmação
• Receber mensagem do cliente
• Enviar mensagem ao cliente
Aqui escrevi dois programas individuais, um para o lado do servidor e outro para o lado do cliente. Precisamos de um computador com ambiente Linux. Mas não se preocupe; você pode se comunicar com apenas um único sistema.
Programa do lado do cliente:
//*********************************TCP_client.c************ ********************//
#include
#include
#include
#include
#include
#include
#include
#include
#include
int principal
{
char enviarMensagem(512),receberMensagem(512);
meia interna, resultado;
estrutura hostent *host;
estrutura sockaddr_in serverAdd;
host = gethostbyname(“xxx.xx.xx.xx”);
if ((meia = soquete(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror(“Falha na criação do soquete”);
saída(1);
}
serverAdd.sin_family = AF_INET;
serverAdd.sin_port=htons(5000);
serverAdd.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(servidorAdd.sin_zero),8);
if (connect(sock, (struct sockaddr *)&serverAdd, sizeof(struct sockaddr)) == -1)
{
perror(“Falha na conexão”);
saída(1);
}
enquanto(1)
{
resultado = recv(meia,receberMensagem,1024,0);
receberMensagem(resultado) = ”;
printf(“nMensagem recebida: %s”, recebeMensagem);
printf(“nENVIAR A mensagem: “);
fgets(sendMessage,512,stdin);
enviar(meia,enviarMensagem,strlen(enviarMensagem), 0);
}
retornar 0;
}
//*********************************TCP_client.c************ ********************//
Programa do lado do servidor:
//*********************************TCP_server.c************ *******************//
#include
#include
#include
#include
#include
#include
#include
#include
#include
int principal
{
char enviarMensagem(1024), receberMensagem(1024);
int meia, conectado, resultado;
estrutura sockaddr_in serverAdd, clientAdd;
comprimento interno;
if ((meia = soquete(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror(“Falha na criação do soquete”);
saída(1);
}
if (setsockopt(meia,SOL_SOCKET,SO_REUSEADDR,&1,tamanho(int)) == -1)
{
perror(“Definir opção de soquete”);
saída(1);
}
serverAdd.sin_family = AF_INET;
serverAdd.sin_port=htons(5000);
serverAdd.sin_addr.s_addr=INADDR_ANY;
bzero(&(servidorAdd.sin_zero),8);
if (bind(sock, (struct sockaddr *)&serverAdd, sizeof(struct sockaddr))== -1)
{
perror(“Não foi possível vincular”);
saída(1);
}
if (ouvir(meia, 3) == -1)
{
perror(“Ouvir”);
saída(1);
}
printf(“TCPServer aguardando conexão do clienten”);
flush(stdout);
enquanto(1)
{
comprimento = sizeof(struct sockaddr_in);
conectado = aceitar(meia,(struct sockaddr *)&clientAdd,&length);
printf(“O servidor está conectado com o endereço IP %se porta %d n”,inet_ntoa(clientAdd.sin_addr),ntohs(clientAdd.sin_port));
enquanto (1)
{
printf(” ENVIE a mensagem: “);
fgets(sendMessage,100,stdin);
enviar(conectado, enviarMensagem,strlen(enviarMensagem), 0);
resultado = recv(conectado,receberMensagem,512,0);
receberMensagem(resultado) = ”;
printf(“Mensagem recebida: %sn”, recebeMensagem);
flush(stdout);
}
}
retornar 0;
}
//*********************************TCP_server.c************ *******************//
Salve o arquivo no diretório e compile-o. Após a compilação bem-sucedida, execute o arquivo executável no terminal de comando. Você pode consultar o tutorial Como fazer o primeiro programa C no Linux se não estiver ciente do processo de compilação e execução.
Observação: Anote o endereço IP do seu servidor no lugar de “xxx.xxx.xx.xx”. no programa do lado do cliente.
Execute o programa servidor –cliente no mesmo sistema
Você pode executar o programa cliente-servidor na mesma máquina. Primeiro encontre o endereço IP do seu PC cliente conforme descrevi acima. Agora, se você quiser rodar no mesmo PC o mesmo IP é inserido no código fonte do cliente. Salve o código-fonte do servidor e do cliente no mesmo PC.
Abra o terminal de comando e execute o primeiro arquivo executável do servidor. O código do lado do servidor está em modo de execução. Não interrompa o código. Abra outro terminal de comando e execute o arquivo executável do lado do cliente.
Nota: Se você não executar lado do servidor código e tente executar o primeiro código do lado do cliente, ocorrerá um erro de conexão recusada.
Veja a imagem a seguir para compreensão:
Aqui, as partes pretas da imagem indicam o endereço IP do cliente conectado e o número da porta. Agora, insira a mensagem do terminal do servidor.
Agora você pode enviar dados do cliente para o servidor. O modelo servidor-cliente é comunicado usando TCP/IP. Insira os dados do cliente terminal e verifique.
Aqui, não terminei a conexão. Assim, ambos podem se comunicar até a conexão está fechada. Pressione ctrl + C de qual terminal você deseja sair.