Boas!
Estou a fazer uma pequena aplicação cliente/servidor de partilha de ficheiros em C , e estou a tentar implementar o seguinte:
O cliente da minha aplicaçao envia para o endereço 255.255.255.255 uma mensagem a pedir um determinado ficheiro.Na rede existe apenas um servidor,no entanto pode haver vários clientes.
O servidor responde com um ACK caso possua o ficheiro especificado pelo cliente.Até aqui tudo bem.
A dúvida surge é agora,pois pretendo com que o cliente,após receber a confirmação(ACK) do servidor,verifique se a mensagem de resposta vem do servidor ou se a mensagem é de origem desconhecida.Para tal tenho a seguinte linha de código no cliente:
O SERV_HOST_ADDR está definido com "255.255.255.255" para o cliente poder enviar o pedido de ficheiro para a rede e o porto está definido também com um valor.Ora,o problema surge aquando da chamada à função recvfrom em que o endereço ip de quem enviou a mensagem é preenchido na estrutura.Esse endereço é,portanto o endereço onde se encontra o utilizador.
Assim,ao fazer a comparação no if do SERV_HOST_ADDR com o endereço serv_addr.sin_addr preenchido na chamada ao recvfrom, eles nunca vão ser iguais(mesmo que a resposta tenha vindo do servidor) e vai entrar sempre no else.
O que eu pretendia era que alguém me pudesse ajudar a solucionar este problema, de maneira que o cliente verificasse se a resposta vem do servidor para onde enviou a mensagem ou de outro sitio.
Desde já,obrigado pela ajuda!
Estou a fazer uma pequena aplicação cliente/servidor de partilha de ficheiros em C , e estou a tentar implementar o seguinte:
O cliente da minha aplicaçao envia para o endereço 255.255.255.255 uma mensagem a pedir um determinado ficheiro.Na rede existe apenas um servidor,no entanto pode haver vários clientes.
O servidor responde com um ACK caso possua o ficheiro especificado pelo cliente.Até aqui tudo bem.
A dúvida surge é agora,pois pretendo com que o cliente,após receber a confirmação(ACK) do servidor,verifique se a mensagem de resposta vem do servidor ou se a mensagem é de origem desconhecida.Para tal tenho a seguinte linha de código no cliente:
Código:
...
msg_tam=recvfrom(socketfd,buffer,BUFFERSIZE,0,(struct sockaddr*)&serv_addr,&nbytes);
if(msg_tam<0)
Abort("...");
buffer[msg_tam]=0;
if(SERV_HOST_PORT==ntohs(serv_addr.sin_port) && strcmp(SERV_HOST_ADDR,(char*) inet_ntoa(serv_addr.sin_addr)==0)
{
...
}
else
printf("mensagem de origem desconhecida!");
O SERV_HOST_ADDR está definido com "255.255.255.255" para o cliente poder enviar o pedido de ficheiro para a rede e o porto está definido também com um valor.Ora,o problema surge aquando da chamada à função recvfrom em que o endereço ip de quem enviou a mensagem é preenchido na estrutura.Esse endereço é,portanto o endereço onde se encontra o utilizador.
Assim,ao fazer a comparação no if do SERV_HOST_ADDR com o endereço serv_addr.sin_addr preenchido na chamada ao recvfrom, eles nunca vão ser iguais(mesmo que a resposta tenha vindo do servidor) e vai entrar sempre no else.
O que eu pretendia era que alguém me pudesse ajudar a solucionar este problema, de maneira que o cliente verificasse se a resposta vem do servidor para onde enviou a mensagem ou de outro sitio.
Desde já,obrigado pela ajuda!