Enviado em 11/06/2019 - 23:39h
Eu estou criando uma aplicação cliente/servidor em C no linux. O propósito é bem simples, saber se vale mais a pena alugar ou vender um imóvel.O usuário digita o valor do aluguel, os meses que irá alugar e o valor que irá vender e o servidor faz as contas e devolve o resultado. Tudo está dentro de um do while para ficar infinito, no final o usuário digita CONTINUAR para testar outros valores e SAIR para encerrar a conexão. Mas está com um problema que não consigo identificar. A primeira vez que comparamos valores, o servidor retorna o resultado correto(alugar ou vender), porém a partir da segunda vez ao digitar CONTINUAR, ele sempre retorna resultados errados. Eu suspeito que esteja armazenando dados na variáveis erradas a partir da segunda vez, coloquei uns prints no meio do código para mostrar os valores e tem divergência.E também tentei zerar as variáveis no começo e usar vários bzero e fflush, mas sem resultado. Mas não tenho certeza de nada. Podem me ajudar?#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <string.h>
int main ()
{
struct sockaddr_in sock;
int con, sockid,numbytes;
char resposta[10];
char buf[100];
char aluguel[10];
char venda[10];
char meses[2];
sockid = socket(AF_INET, SOCK_STREAM, 0);
bzero(&(sock),sizeof(sock));
sock.sin_family = AF_INET;
sock.sin_port = htons(9012);
inet_pton(AF_INET, "127.0.0.1",&sock.sin_addr);
con=connect(sockid,(struct sockaddr*)&sock,sizeof(sock));
do{
if(con>=0)
{
printf("=====================================================\n");
printf("Descubra se vale a pena vender ou alugar seu imóvel\n");
printf("=====================================================\n");
printf("Digite por quanto voce quer alugar: \n");
scanf("%s", &aluguel);
printf("=====================================================\n");
if(send(sockid,aluguel,strlen(aluguel),0)==-1)
{
printf("Erro ao enviar mensagem\n");
close(sockid);
}
printf("Digite por quantos meses ira alugar : \n");
scanf("%s", &meses);
printf("=====================================================\n");
if(send(sockid,meses,strlen(meses),0)==-1)
{
printf("Erro ao enviar mensagem\n");
close(sockid);
}
printf("Digite por quanto quer vender: \n");
scanf("%s", &venda);
printf("=====================================================\n");
if(send(sockid,venda,strlen(venda),0)==-1)
{
printf("Erro ao enviar mensagem \n");
close(sockid);
}
bzero(&buf,sizeof(buf));
if((numbytes=recv(sockid,buf,100,0)==-1))
{
printf("Erro ao receber a mensagem\n");
}
printf("Vale mais a pena: %s\n",buf);
printf("Digite SAIR para sair ou CONTINUAR para continuar a comparar.\n");
scanf("%s",&resposta);
fflush(stdin);
if(send(sockid,resposta,strlen(resposta),0)==-1)
{
printf("Erro ao enviar mensagem\n");
close(sockid);
}
if(strcmp(resposta,"CONTINUAR")==0)
{
continue;
}
}
}while(strcmp(resposta,"SAIR")!=0);
close(sockid);
}
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <string.h>
int main ()
{
int sockid;
struct sockaddr_in servidor;
int client,numbytes;
float convertido;
float convertido1;
float convertido2;
char passar[10];
char buf[100];
char buf1[100];
char buf2[100];
float resultado;
char resposta[10];
sockid = socket(AF_INET, SOCK_STREAM,0);
if(sockid==-1)
{
printf("Não foi possivel criar o socket");
exit(1);
}
servidor.sin_family= AF_INET;
servidor.sin_addr.s_addr = htonl(INADDR_ANY);
servidor.sin_port = htons(9012);
if(bind(sockid,(struct sockaddr*)&servidor, sizeof(servidor))<0)
{
printf("Falhou ao associar a porta\n");
}
listen(sockid, 3);
int c, new_socket;
while(1)
{
c = sizeof(struct sockaddr_in);
new_socket = accept(sockid, (struct sockaddr *)&client,(socklen_t *)&c);
if(new_socket <=0)
{
printf("Falhou ao aceitar o conector\n");
continue;
}
while(1){
printf("Conexão aceita\n");
fflush(stdin);
resultado = 0;
convertido = 0;
convertido1 = 0;
convertido2 = 0;
bzero(&buf,sizeof(buf));
if((numbytes=recv(new_socket,buf,100,0)==-1))
{
printf("Erro ao receber a mensagem\n");
}
convertido = atof(buf);
bzero(&buf1,sizeof(buf1));
if((numbytes=recv(new_socket,buf1,100,0)==-1))
{
printf("Erro ao receber mensagem\n");
}
convertido1 = atof(buf1);
printf(buf1);
bzero(&buf2,sizeof(buf2));
if((numbytes=recv(new_socket,buf2,100,0)==-1))
{
printf("Erro ao receber mensagem\n");
}
convertido2 = atof(buf2);
printf(buf2);
resultado = convertido*convertido1;
if(resultado>convertido2)
{
sprintf(passar, "Alugar");
}
else
{
sprintf(passar,"Vender");
}
if(send(new_socket,passar,strlen(passar),0)==-1)
{
printf("Erro ao enviar a mensagem\n");
close(new_socket);
}
bzero(&resposta,sizeof(resposta));
if((numbytes=recv(new_socket,resposta,strlen(resposta),0)==-1))
{
printf("Erro ao receber a mensagem\n");
}
fflush(stdin);
if(strcmp(resposta,"SAIR")==0)
{
close(new_socket);
break;
}
}
}
}
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)