-
Notifications
You must be signed in to change notification settings - Fork 7
/
clientFiles.c
104 lines (83 loc) · 2.45 KB
/
clientFiles.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
* Author: Pablo Camarillo Ramírez.
* Fecha/Date: 28 de Septiembre de 2010/September 28th 2010.
* Redes de Computadora / Computer networks.
* Description: This application contains the client functionality
* to send/receive files through C-like sockets by using
* TCP/UDP packages.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFFSIZE 1
#define ERROR -1
#define PUERTO 1100
int main(int argc, char *argv[]){
struct sockaddr_in stSockAddr;
int sockLen;
int Res;
int SocketFD;
int recibido;
char buffer[BUFFSIZE];
char mensaje[80];
int totalBytesRcvd;
int bytesRcvd;
FILE *archivo;
if(argc < 3){
perror("USO:./clientFiles <archivo a enviar> <direccionIP del servidor>");
exit(EXIT_FAILURE);
}
/*Se abre el archivo a enviar*/
archivo = fopen(argv[1],"rb");
/*Se crea el socket*/
SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
/*Se verifica la integridad del archivo*/
if(!archivo){
perror("Error al abrir el archivo:");
exit(EXIT_FAILURE);
}
/*Se verifica la integridad del socket*/
if (SocketFD == ERROR){
perror("cannot create socket");
exit(EXIT_FAILURE);
}
/*Se configura la dirección del socket del cliente*/
memset(&stSockAddr, 0, sizeof stSockAddr);
stSockAddr.sin_family = AF_INET;
stSockAddr.sin_port = htons(1100);
Res = inet_pton(AF_INET, argv[2], &stSockAddr.sin_addr);
sockLen = sizeof(stSockAddr);
if (0 > Res){
perror("error: El primer paránmetro no es una familia de direcciónes");
close(SocketFD);
exit(EXIT_FAILURE);
}else if (Res == 0){
perror("char string (El segundo parmetro no contiene una dirección IP válida");
close(SocketFD);
exit(EXIT_FAILURE);
}
if (connect(SocketFD, (struct sockaddr *)&stSockAddr, sizeof stSockAddr) == ERROR){
perror("Error a la hora de conectarse con el cliente");
close(SocketFD);
exit(EXIT_FAILURE);
}
printf("Se ha conectado con el servidor:%s\n",(char *)inet_ntoa(stSockAddr.sin_addr));
/*Se envia el archivo*/
while(!feof(archivo)){
fread(buffer,sizeof(char),BUFFSIZE,archivo);
if(send(SocketFD,buffer,BUFFSIZE,0) == ERROR)
perror("Error al enviar el arvhivo:");
}
read(SocketFD,mensaje,sizeof(mensaje));
printf("\nConfirmación recibida:\n%s\n",mensaje);
read(SocketFD,mensaje,sizeof(mensaje));
printf("\nMD5SUM:\n%s\n",mensaje);
fclose(archivo);
close(SocketFD);
return 0;
}//End main