universitario

Páginas: 7 (1686 palabras) Publicado: 21 de enero de 2015
Implementación Aplicación para transferencia de ficheros
Fichero “cli_fich.h”:
#define MAX_BUF 1024
#define SERVER "localhost"
#define PORT 6012
#define
#define
#define
#define
#define
#define
#define
#define
#define

COM_USER
COM_PASS
COM_LIST
COM_DOWN
COM_DOW2
COM_UPLO
COM_UPL2
COM_DELE
COM_EXIT

0
1
2
3
4
5
6
7
8

#define
#define
#define
#define
#defineOP_LIST
OP_DOWN
OP_UP
OP_DEL
OP_EXIT

1
2

3

4
5

char * COMANDOS[] =
{"USER","PASS","LIST","DOWN","DOW2","UPLO","UPL2","DELE","EXIT",NULL};
char * MSG_ERR[] =
{
"Todo correcto.\n",
"Comando desconocido o inesperado.\n",
"Usuario desconocido.\n",
"Clave de paso o password incorrecto.\n",
"Error al crear la lista de ficheros.\n",
"El fichero no existe.\n",
"Error al bajarel fichero.\n",
"Un usuario anonimo no tiene permisos para esta operacion.\n",
"El fichero es demasiado grande.\n",
"Error al preparar el fichero para subirlo.\n",
"Error al subir el fichero.\n",
"Error al borrar el fichero.\n"
};
int parse(char *status);
int readline(int stream, char *buf, int tam);
int menu();

Fichero “cli_fich.c”:
#include
#include
#include
#include
#include#include
#include
#include
#include











1

#include "cli_fich.h"
int main(int argc, char *argv[])
{
char buf[MAX_BUF], param[MAX_BUF];
char servidor[MAX_BUF];
int puerto = PORT;
int sock, n, status, opcion;
long tam_fich, leidos;
struct stat file_info;
FILE *fp;
struct sockaddr_in dir_serv;
struct hostent *hp;
// Procesar parametros
switch(argc)
{
case 1:strcpy(servidor, SERVER);
break;
case 3:
puerto = atoi(argv[2]);
case 2:
strcpy(servidor, argv[1]);
break;
default:
printf("Uso: %s \n", argv[0]);
exit(1);
}
// Crear socket
if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("Error al crear el socket");
exit(1);
}
// Componer la direccion del servidor
dir_serv.sin_family = AF_INET;
dir_serv.sin_port = htons(puerto);if((hp = gethostbyname(servidor)) == NULL)
{
herror("Error al resolver el nombre del servidor");
exit(1);
}
memcpy(&dir_serv.sin_addr, hp->h_addr, hp->h_length);
// Enviar peticion de conexion al servidor
if(connect(sock, (struct sockaddr *) &dir_serv, sizeof(dir_serv)) < 0)
{
perror("Error al intentar conectar con el servidor");
exit(1);
}
// Enviar usuario y clave de paso (password)
inti=0;
do
{
printf("Usuario: ");
fgets(param,MAX_BUF,stdin);

2

param[strlen(param)-1] = 0;
sprintf(buf,"%s%s\r\n",COMANDOS[COM_USER],param);
write(sock, buf, strlen(buf));
readline(sock, buf, MAX_BUF);
status = parse(buf);
if(status != 0)
{
fprintf(stderr,"Error: ");
fprintf(stderr,"%s",MSG_ERR[status]);
continue;
}
printf("Password: ");
fgets(param,MAX_BUF,stdin);param[strlen(param)-1] = 0;
sprintf(buf,"%s%s\r\n",COMANDOS[COM_PASS],param);
write(sock, buf, strlen(buf));
readline(sock, buf, MAX_BUF);
status = parse(buf);
if(status != 0)
{
fprintf(stderr,"Error: ");
fprintf(stderr,"%s",MSG_ERR[status]);
continue;
}
break;
} while(1);

linea

// Mostrar menu y realizar operacion
do
{
opcion = menu(); // Mostrar el menu
switch(opcion)
{
caseOP_LIST: // Pedir lista de ficheros y mostrar en pantalla
sprintf(buf,"%s\r\n",COMANDOS[COM_LIST]);
write(sock,buf,strlen(buf)); // Enviar comando
n = readline(sock, buf, MAX_BUF); // Recibir respuesta
status = parse(buf);
if(status != 0)
{
fprintf(stderr,"Error: ");
fprintf(stderr,"%s",MSG_ERR[status]);
}
else
{
// Recibir lista de ficheros y mostrarla linea a

ficheros
servidor:\n");int kop = 0;

//

Para controlar el numero de

printf("Lista de ficheros recibida del

printf("------------------------------------------\n");
n = readline(sock, buf, MAX_BUF);
while(n > 2)
{
buf[n-2] = 0;
printf("%s\t\t",strtok(buf,"?"));

3

tam_fich/1024.0);

tam_fich = atol(strtok(NULL,"?"));
if(tam_fich < 0)
printf("Tamaño desconocido\n");
else
{
if(tam_fich <...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Universitario
  • Universitarios
  • Universitario
  • Universitario
  • Universitario
  • Universitario
  • Universitario
  • Universitario

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS