Ir para conteúdo

WizardTech

Members
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por WizardTech


  1. Eu estou criando uma aplicação cliente/servidor em C no ubuntu. 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?

     

    CÓDIGO DO CLIENTE:

    #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);
    
    }

     

    CÓDIGO DO SERVIDOR:

    #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;
    					
    				}
    		
    			}
    	}
    
    }

     

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.