#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h> 
//#include "clientserver.h" 

#define BUFLEN 512
int main(int argc, char **argv)
{
struct sockaddr_in  si_server;
int                 port, s, i, slen=sizeof(si_server);
char                buf[BUFLEN];
char                srv_addr[16]; 

memset(srv_addr, 0, 16);

if(argc<3)
{
fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);
exit(EXIT_FAILURE);
} 

port=atoi(argv[2]);
printf("port = %d\n", port);
if(port<1024)
{
fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);
fprintf(stderr, "\twhere <port number> shall be > 1023\n");
exit(EXIT_FAILURE);
}


 
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
{
perror("socket");
exit(EXIT_FAILURE);
}
        memcpy(srv_addr, argv[1], strlen(argv[1])); 

memset((char *) &si_server, 0, sizeof(si_server)); 

si_server.sin_family   =  AF_INET;
si_server.sin_port     =  htons(port);
if (inet_aton(srv_addr, &si_server.sin_addr)==0) 
{
fprintf(stderr, "inet_aton() failed\n");
exit(EXIT_FAILURE);
}
    
 


if(argc==4)  

{
sprintf(buf, "%s", argv[3]);
if (sendto(s, buf, strlen(argv[3]), 0, (struct sockaddr *)&si_server, slen)==-1)
{
perror("sendto()");
exit(EXIT_FAILURE);
}
}

else 

{
for (i=0; i<100; i++)
{
printf("Sending packet %d\n", i);
sprintf(buf, "This is packet %d\n", i);
if (sendto(s, buf, BUFLEN, 0, (struct sockaddr *)&si_server, slen)==-1)
{
perror("sendto()");
exit(EXIT_FAILURE);
}
}
}

close(s);
exit (EXIT_SUCCESS);
}