#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
int
main()
{
int
clientSocket, portNum, nBytes;
char
file_buffer[3000], path[1024], buffer[3000];
char
const
key[3000] =
"HIDDENKEY"
;
struct
sockaddr_in serverAddr;
socklen_t addr_size;
int
i;
clientSocket = socket(PF_INET, SOCK_DGRAM, 0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(5004);
serverAddr.sin_addr.s_addr = inet_addr(
"127.0.0.1"
);
memset
(serverAddr.sin_zero,
'\0'
,
sizeof
serverAddr.sin_zero);
addr_size =
sizeof
serverAddr;
while
(1) {
printf
(
"Specify file name: \n"
);
gets
(path);
FILE
* fp;
fp =
fopen
(path,
"r"
);
if
(fp == NULL) {
printf
(
"file does not exist\n"
);
}
fseek
(fp, 0, SEEK_END);
size_t
file_size =
ftell
(fp);
fseek
(fp, 0, SEEK_SET);
if
(
fread
(file_buffer, file_size, 1, fp) <= 0) {
printf
(
"unable to copy file into buffer\n"
);
exit
(1);
}
if
(sendto(clientSocket, file_buffer, 3000, 0, (
struct
sockaddr*)&serverAddr,
addr_size) < 0) {
printf
(
"error in sending the file\n"
);
exit
(1);
}
bzero(file_buffer,
sizeof
(file_buffer));
nBytes = recvfrom(clientSocket, buffer, 1024, 0, NULL, NULL);
printf
(
"Received from server: \n"
);
for
(i = 0; i < 15; ++i)
printf
(
"%02X "
, buffer[i]);
printf
(
"\n"
);
char
x[3000];
for
(i = 0; i < nBytes - 1; ++i)
x[i] = (
char
)(buffer[i] ^ key[i]);
printf
(
"Decrypted message: (First 15 characters)\n"
);
for
(i = 0; i < 11; ++i)
printf
(
"%c "
, x[i]);
printf
(
"\n"
);
}
return
0;
}