Code:
Client code:-
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <sys/unistd.h>
#include <unistd.h>
#include <stdlib.h>
#include <strings.h>
#define STRLEN 1024
int main(int argc, char *argv[]) {
int sockfd, n, slen;
char sendline[STRLEN], recvline[STRLEN];
struct sockaddr_in servaddr;
int gethostname(char *name, size_t len);
struct hostent *h;
char hostname[128];
struct sockaddr_in sa;
if(argc != 3)
{
printf("Usage: %s <Enter Server Address> <Enter port no >\n", argv[0]);
exit(0);
}
gethostname(hostname, sizeof hostname);
printf("\n\nYou are connected from:- %s\n", hostname);
/* create hostent structure from user entered host name*/
if ( (h = gethostbyname(argv[1])) == NULL)
{
printf("\n%s: error in gethostbyname()", argv[0]);
exit(0);
}
/* create server address structure */
bzero(&servaddr, sizeof(servaddr)); /* initialize it */
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(inet_addr(argv[1]));
servaddr.sin_port = htons(atoi(argv[2])); /* get the port number from argv[2]*/
if ( (sockfd = socket(AF_INET,SOCK_DGRAM, 0)) < 0)
{
printf("\n%s: error in socket()", argv[0]);
exit(0);
}
printf("\nEnter The name of the file you want to search:- ");
scanf("%s",sendline);
if (sendto(sockfd, sendline, sizeof(sendline), 0, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
{
printf("\n%s: error in sendto()", argv[0]);
exit(0);
}
slen = sizeof(servaddr);
if ( (n = recvfrom(sockfd, recvline, STRLEN, 0, (struct sockaddr *) &servaddr, &slen)) < 0) {
printf("\n%s: error in recvfrom()", argv[0]);
exit(0);
}
recvline[n] = 0;
fputs(recvline, stdout);
close(sockfd);
}
Server Code:-
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/stat.h>
#include <fcntl.h>
#define STRLEN 1024
int main(int argc, char *argv[]) {
int sockfd, clen, n;
struct sockaddr_in servaddr, cliaddr;
struct stat buffer;
int status;
char a[50];
struct stat m;
char str_in[STRLEN];
if (argc != 2) {
printf("\nUsage: %s < Enter port no>", argv[0]);
exit(0);
}
/* socket creation */
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
printf("\n%s: error in socket()", argv[0]);
exit(0);
}
/* create local server socket structure */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(atoi(argv[1]));
/* bind it to an address */
if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr))< 0)
{
printf("\n%s: error in bind()", argv[0]);
exit(0);
}
clen = sizeof(cliaddr);
if ( (n = recvfrom(sockfd, str_in, STRLEN, 0, (struct sockaddr *) &cliaddr, &clen)) < 0) {
printf("\n%s: error in recvfrom()", argv[0]);
exit(0);
}
printf("%s\n",str_in);
sprintf (a,"data/%s", str_in);
printf("%s\n",a);
status= stat( a, &buffer );
if (status ==0)
{
printf("File found");
sprintf(str_in,"%s",buffer.st_size);
}
else
{
printf("File not found");
sprintf(str_in,"0");
}
if (sendto(sockfd,str_in,n, 0, (struct sockaddr *) &cliaddr, clen) < 0) {
printf("\n%s: error in sendto()", argv[0]);
exit(0);
}
close(sockfd);
}
Comment