Source Code : TFTPS.C

TFTPS.C

#include

#include

#include

#include

#include

#define SERV_UDP_PORT  2552

#define SERV_HOST_ADDR "10.1.2.199"

#define MAX 5000

#define MAX1 20

#define MAX2 100

main()

{

  int sockfd,addrlen;

  struct sockaddr_in cli_addr,serv_addr;

  char buf[MAX];

  FILE *fp;

  char ch;

  char f1[20];

  char pass[MAX1]="Give_Pass:";

  char data[MAX1]="Give_Data_To_Save:";

  char eof[MAX1]="End_Of_File:";

  char error[MAX1]="Error_In_File:";

  char no[MAX1]="File_Not_Open:";

  char file[MAX1]="Give_File_Name_FROM:";

  char file1[MAX1]="Give_File_Name_TO:";

  char buf1[MAX];

  char tf[MAX1]=":Well_Come_To_TFTP:";

  char tf1[MAX1]=":Try_Again:";

  char tf2[MAX2]="What_Service_U_Want::1_Read_File::2_Write_File::3_Append_File:";

  char log[MAX1]="Give_Login_Name:";

  int a,b,q;

  sockfd=socket(AF_INET,SOCK_DGRAM,0);

  bzero((char *) &serv_addr,sizeof(serv_addr));

  serv_addr.sin_addr.s_addr=inet_addr(SERV_HOST_ADDR);

  serv_addr.sin_port=htons(SERV_UDP_PORT);

  serv_addr.sin_family=AF_INET;

  bind(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr));

  addrlen=sizeof(cli_addr);

 

  while(strcmp(buf,"bye")!=0)

  {

 

  a=0;

  b=0;

  memset(buf1,0,100);

  recvfrom(sockfd,buf,MAX,0,(struct sockaddr *) &cli_addr,&addrlen);

  printf("\nRead data is %s ",buf);

  while(buf[a]!='\0')

  {

  if(buf[a]==27||buf[a]==8)

  {

  if(buf[a]==27)

  {

  a=a+1;

 

  }

  else

  {

  b=b-1;

  a=a+1;

 

  }

  }

  else

  {

if(buf[a]=='I'||buf[a]=='A'||buf[a]=='C'||buf[a]=='E'||buf[a]=='O'||buf[a]=='F')

  a++;

  else

  {

  buf1[b]=buf[a];

  a++;

  b++;

  }

  }

  }

  printf("\nCMD is=%s\n",buf1);

  if(strcmp(buf1,"SUD")==0)

  {

  sendto(sockfd,pass,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);  recvfrom(sockfd,buf,MAX,0,(struct sockaddr *) &cli_addr,&addrlen);

  printf("\nPasswd Of User= %s\n",buf);

  if(strcmp(buf,"ANG")==0)

  {

  printf("\n::::Well Come To TFTP::::\n");

  sendto(sockfd,tf,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  recvfrom(sockfd,buf,MAX,0,(struct sockaddr *) &cli_addr,&addrlen);

  printf("\n User= %s\n",buf);

  sendto(sockfd,tf2,MAX2,0,(struct sockaddr *) &cli_addr,addrlen);

  recvfrom(sockfd,buf,MAX,0,(struct sockaddr *) &cli_addr,&addrlen);

  printf("\n User= %s\n",buf);

  if(strcmp(buf,"READ")==0)

  {

  sendto(sockfd,file,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  recvfrom(sockfd,buf,MAX,0,(struct sockaddr *) &cli_addr,&addrlen);

  strcpy(f1,buf);

  printf("\n File_Name= %s\n",f1);

  fp=fopen(f1,"r");

  if(feof(fp))

  sendto(sockfd,eof,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  if(ferror(fp)!=0)

  sendto(sockfd,error,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  if(fp==NULL)

  sendto(sockfd,no,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  q=0;

  while(!feof(fp))

  {

  ch=fgetc(fp);

  buf[q]=ch;

  printf("%c",ch);

  q++;

  }

  sendto(sockfd,buf,MAX,0,(struct sockaddr *) &cli_addr,addrlen);

  }

  if(strcmp(buf,"WRITE")==0)

  {

  sendto(sockfd,file1,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  recvfrom(sockfd,buf,MAX,0,(struct sockaddr *) &cli_addr,&addrlen);

  strcpy(f1,buf);

  printf("\n File_Name= %s\n",f1);

  fp=fopen(f1,"w+");

  if(feof(fp))

  sendto(sockfd,eof,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  if(ferror(fp)!=0)

  sendto(sockfd,error,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  if(fp==NULL)

  sendto(sockfd,no,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  sendto(sockfd,data,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  recvfrom(sockfd,buf,MAX,0,(struct sockaddr *) &cli_addr,&addrlen);

  printf("\nRecieve_File_Content= %s\n",buf);

  q=0;

  fwrite(buf,MAX,1,fp);

 

  }

  }

  }

  else

  {

  printf("try again\n");

  sendto(sockfd,tf1,MAX1,0,(struct sockaddr *) &cli_addr,addrlen);

  }

 

  close(sockfd);