/* ********************************************************
*
* sender.c
*
********************************************************** */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netinet/in.h>

#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>

#define LOCALPORT 2000 + (100*7) + 2
#define MAXSENDERBUFFER 64
#define LOCALIP "xxx.xx.xxx.xx"
#define FILESTODO 10
#define MAXRETRY 4
#define TIMEOUT 150

int conversion();

int numbytes1;
int ackreceived = 0;
int filesdone = 0;
int retrytimes1 = 0;

FILE *ifp1;

char clean[MAXSENDERBUFFER] = "";
char rbuf1[MAXSENDERBUFFER] = "";
char buf1[MAXSENDERBUFFER] = "";
char buf2[MAXSENDERBUFFER] = "";

char file_name[MAXSENDERBUFFER] = "";
char file_name1[MAXSENDERBUFFER] = "";

int localtimeout = 0;
int packectcounter = 0;
int totalbytessent = 0;
int x = 0;

char c;

main(int argc, char *argv[])
{
/* ************************************************************
* SOCKET MANIPULATION AND VARIABLES */

int sockfd;
struct sockaddr_in their_addr;
int addr_len, numbytes;

if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1)
{
perror("Socket ->");
exit(1);
}
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(LOCALPORT);
their_addr.sin_addr.s_addr = inet_addr(LOCALIP);
bzero(&(their_addr.sin_zero),8);
/* *********************************************************** */

ifp1=fopen(argv[1],"r");

/* *********************************************************** */
/* sending file name to receiver */
if (strcmp(argv[1],"sender1.txt")==0)
strcpy(file_name,"receiver1.txt");
if (strcmp(argv[1],"sender2.txt")==0)
strcpy(file_name,"receiver2.txt");
if (strcmp(argv[1],"sender3.txt")==0)
strcpy(file_name,"receiver3.txt");
if (strcmp(argv[1],"sender4.txt")==0)
strcpy(file_name,"receiver4.txt");
if (strcmp(argv[1],"sender5.txt")==0)
strcpy(file_name,"receiver5.txt");
if (strcmp(argv[1],"sender6.txt")==0)
strcpy(file_name,"receiver6.txt");
if (strcmp(argv[1],"sender7.txt")==0)
strcpy(file_name,"receiver7.txt");
if (strcmp(argv[1],"sender8.txt")==0)
strcpy(file_name,"receiver8.txt");
if (strcmp(argv[1],"sender9.txt")==0)
strcpy(file_name,"receiver9.txt");
if (strcmp(argv[1],"sender10.txt")==0)
strcpy(file_name,"receiver10.txt");
if((numbytes = sendto(sockfd,file_name,strlen(file_name),0,
(struct sockaddr *)&their_addr,sizeof(struct sockaddr))) == -1)
{
perror("Error Sending file name to receiver ->");
}

strcpy(file_name1,argv[1]);
if((numbytes = sendto(sockfd,file_name1,strlen(file_name1),0,
(struct sockaddr *)&their_addr,sizeof(struct sockaddr))) == -1)
{
perror("Error Sending second file name to receiver ->");
}
/* *********************************************************** */

printf("\nss: =======================================================");
printf("\nss: Sending File : %s ", argv[1]);

while ((c=getc(ifp1)) != EOF)
{
buf1[x] = c;
/* ***************************************************************** */
/* COMMUNICATION SECTION */
/* ***************************************************************** */
if((numbytes = sendto(sockfd,buf1,strlen(buf1),0,
(struct sockaddr *)&their_addr,sizeof(struct sockaddr))) == -1)
{
perror("Error Sending data to receiver ->");
exit(1);
}
packectcounter++;
totalbytessent = totalbytessent + numbytes;

addr_len = sizeof(struct sockaddr);
if((numbytes=recvfrom(sockfd,rbuf1,MAXSENDERBUFFER,0,
(struct sockaddr *)&their_addr,&addr_len))==-1)
{
perror("\n Timeout - Receive ack from receiver ->");
exit(1);
}

localtimeout = 0;
ackreceived = conversion();

if (packectcounter==ackreceived)
retrytimes1 = 0;

if ((packectcounter!=ackreceived)&&(retrytimes1<=MAXRETRY))
{
retrytimes1++;
if((numbytes = sendto(sockfd,buf1,strlen(buf1),0,
(struct sockaddr *)&their_addr,sizeof(struct sockaddr))) == -1)
{
perror("\n Error Sending data to receiver ->");
exit(1);
}
}
if (retrytimes1>MAXRETRY)
{
printf("\n ---> ERROR sending data after %d retries",retrytimes1);
exit(1);
}
/* ***************************************************************** */
/* END COMMUNICATION SECTION */
/* ***************************************************************** */

} /* end main while loop */
filesdone++;

/* *********************************************************** */

printf("ss: > EOF:%s reached");

strcpy(buf1, "111110End111110Of111110File111110");
if((numbytes = sendto(sockfd,buf1,strlen(buf1),0,
(struct sockaddr *)&their_addr,sizeof(struct sockaddr))) == -1)
{
perror("Send End Of File Marker -> ");
exit(1);
}
/* *********************************************************** */
printf("\nss: Finish Sending : %s ",argv[1]);
printf("\nss: Port Used : %d ",LOCALPORT);
printf("\nss: IP Address Used : %s ",inet_ntoa(their_addr.sin_addr));
printf("\nss: Bytes sent : %d ",totalbytessent);
printf("\nss: Packets sent : %d ",packectcounter);
printf("\nss: =======================================================\n");
close(ifp1);
/* *********************************************************** */
close(sockfd);
}

int conversion()
{
int i, ii, j = 0;
for (j=0; j<strlen(rbuf1); j++)
{
if ((rbuf1[j])=='0')
i = 0;
if ((rbuf1[j])=='1')
i = 1;
if ((rbuf1[j])=='2')
i = 2;
if ((rbuf1[j])=='3')
i = 3;
if ((rbuf1[j])=='4')
i = 4;
if ((rbuf1[j])=='5')
i = 5;
if ((rbuf1[j])=='6')
i = 6;
if ((rbuf1[j])=='7')
i = 7;
if ((rbuf1[j])=='8')
i = 8;
if ((rbuf1[j])=='9')
i = 9;
if (j==0)
ii = i;
if (j!=0)
ii = (ii*10) + i;
}
return ii;
}

www.cpccci.com
www.cpcwebsolutions.com
www.cpcwebdevelopment.com