Programa estrutura cliente/servidor

1. Programa estrutura cliente/servidor

Ricardo G. A. de Rezende
RicardoHipHop182

(usa Fedora)

Enviado em 25/11/2009 - 14:06h

Uma aplicação cliente/servidor em que o processo cliente envia ao servidor o nome de um arquivo e recebe o tamanho do arquivo em bytes. Se o arquivo não existir o servidor enviará o valor -1.
Escreva o módulo cliente que implemente as seguintes funções:
a) Leia o nome do arquivo, o ip e a porta do servidor na linha de comando.
b) Envie o nome do arquivo para o servidor.
c) Aguarde a resposta do servidor informando o tamanho do arquivo, caso o arquivo exista, ou –1 caso contrário
d) Mostre o tamanho do arquivo ou mensagem de erro (caso não exista).

até agora consegui isso...
Alguém pode me ajudar nos possíveis erros meus ?????

#include <stdio.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>

#Define MAX 200

struct sockaddr_in {

short int sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
} ;

int main (int argc , char**argv) {

int sockdesc, i , conexão, desc, nb ;

struct sockaddr_in estrutura ;

char buffer[max+1];

if (argc!=4) printf ("sintaxe : %s arquivo , <ip> , porta \n", argv[0]);

else{

estrutura.sin_family= AF_INET;
estrutura.sin_addr.s_addr=inet_addr(argv[2]);
estrutura.sin_port= htons(argv[3]);

sockdesc= socket(AF_INET,SOCK_STREAM, 0 );

if (sockdesc== -1 ) printf ("error sockdesc -1");

else {
Conexão = connect (sockdesc,(struct sockaddr*)&estrutura, sizeof(struct sockaddr));

if (conexão== - 1) printf("erro na conexão");

else {

desc= open (argv[1],O_RDONLY);

if (desc<0) printf("erro ao abrir o arquivo ou arquivo nao existe %s \n",argv[1]);

else {

do{ nb= read(desc, buffer, MAX);} while (nb!=0);

close (desc);

close(sockdesc) ; close(conexão);

}
}
}
}

#Define MAX 200

int desc, nb;

char buffer[max+1]


  


2. Re: Programa estrutura cliente/servidor

Junior
2016henrique

(usa Ubuntu)

Enviado em 19/07/2016 - 15:09h

Me falo quais erros que estas tendo, mas ja pude observar quatro:

-Não precisa definir a struct sockaddr_in, ela ja vem definida nos headers que voce incluiu, isso pode causar confusao no app...
-Faltou incluir o header <arpa/inet.h>., <netinet/in.h> e <stdlib.h>.
- Na funçao 'htons()', voce colocou como parametro argv[],mas a variavel q htons() aceita só é uint16_t, mas char *argv[] é uma string (Sao coisas diferentes...)... Ex:
/* uint16_t é uma variavel int de 16 bits (ou 2 bytes) de tamanho, ou seja, a metade de um int (int tem 4 bytes de tamanho)...*/
uint16_t x;
x = 8000;
htons(x);
...

-Nos parametros da função main(), vc botou 'char **argv, mas os parametros do terminal sao do tipo char *argv[]

- Volte á estudar mais os tipos de variaveis, eu vi falta nesse codigo...ok?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts