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;
}
}
}
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Comunicação entre sede e filial (2)
Agora temos uma assistente virtual no fórum!!! (242)
Quero saber sobre os melhores aplicativos de office para usar em 2024 ... (7)