/cygdrive/d/src/svn/vrut/trunk/modules/tracking/psender/psender.c File Reference

#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <stdio.h>
#include <time.h>

Go to the source code of this file.

Functions

void wait_for_ms (int ms)
 main (int argc, char *argv[])


Function Documentation

main ( int  argc,
char *  argv[] 
)

Definition at line 27 of file psender.c.

00028 {
00029        if (argc != 5) 
00030        {
00031               printf("Parametry: -ip_adresa/hostname port protokol(zadejte udp) konfiguracni_soubor");
00032               return;
00033        }
00034    struct sockaddr_in my_addr, rem_addr;
00035    int                sockfd;
00036    struct hostent     *ph;
00037    struct servent     *ps;
00038    struct protoent    *pp;
00039    unsigned int       inaddr;
00040 
00041    int    i,iii, len, rem_addr_length;
00042    char   s[80];
00043    char   *p;
00044    char   sbuf[80], rbuf[80];
00045    FILE * input;
00046    FILE * config;
00047 
00048    if ((inaddr=inet_addr(argv[1]))!=INADDR_NONE)
00049       ph=gethostbyaddr((char *)&inaddr, sizeof(unsigned int), AF_INET);
00050    else
00051       ph=gethostbyname(argv[1]);
00052 
00053    if (ph)
00054    {
00055       printf("\nHostname: %s\n",ph->h_name);
00056       for (i=0; ph->h_aliases[i]; i++)
00057          printf("          %s\n", ph->h_aliases[i]);
00058 
00059       printf("Type: %i\nLen:  %i\n", ph->h_addrtype, ph->h_length);
00060       for (i=0; ph->h_addr_list[i]; i++)
00061          printf("Addr: %i.%i.%i.%i\n",
00062          (unsigned char)(ph->h_addr_list[i])[0],
00063          (unsigned char)(ph->h_addr_list[i])[1],
00064          (unsigned char)(ph->h_addr_list[i])[2],
00065          (unsigned char)(ph->h_addr_list[i])[3]);
00066    }
00067    else
00068    {
00069       herror("Chyba pri zjisteni adresy - neni registrovano ve jmenne sluzbe");
00070       exit(10);
00071    }
00072 
00073    //-----------------------------------------------------------------
00074    // Zjisteni protokolu
00075 
00076    if (isdigit(argv[3][0]))
00077       pp=getprotobynumber(atoi(argv[3]));
00078    else
00079       pp=getprotobyname(argv[3]);
00080 
00081    if (pp)
00082    {
00083       printf("\nProtocol: %s\n", pp->p_name);
00084       for (i=0; pp->p_aliases[i]; i++)
00085          printf("          %s\n", pp->p_aliases[i]);
00086       printf("Num:  %i\n", pp->p_proto);
00087    }
00088    else
00089    {
00090       printf("Chyba pri zjisteni protokulu\n");
00091       exit(11);
00092    }
00093 
00094    //-----------------------------------------------------------------
00095    // Zjisteni sluzby
00096 
00097    if (isdigit(argv[2][0]))
00098       ps=getservbyport(htons((u_short)atoi(argv[2])), pp->p_name);
00099    else
00100       ps=getservbyname(argv[2], pp->p_name);
00101 
00102    if (ps)
00103    {
00104       printf("\nServname: %s\n",ps->s_name);
00105       for (i=0; ps->s_aliases[i]; i++)
00106          printf("          %s\n", ps->s_aliases[i]);
00107 
00108       printf("Port:  %hi\nProto: %s\n", ntohs((u_short)ps->s_port), ps->s_proto);
00109    }
00110    else
00111    {
00112       if (isdigit(argv[2][0])&&((u_short)atoi(argv[2]) > 1024))
00113          printf("Cislo portu vetsi nez 1024\n");
00114       else
00115       {   
00116          printf("Chyba pri zjisteni sluzby\n");
00117          exit(12);
00118       }   
00119    }
00120 
00121 
00122 
00123    //------------------------------------------------------------------
00124 
00125    printf("\n");
00126 
00127    if ((sockfd = socket(PF_INET, SOCK_DGRAM, pp->p_proto))<0)
00128    {
00129       perror("Socket nelze otevrit");
00130       exit(1);
00131    }
00132    //------------------------------------------------------------------
00133    bzero((char *) &my_addr, sizeof(my_addr));
00134    my_addr.sin_family = AF_INET;
00135    my_addr.sin_addr.s_addr = INADDR_ANY;
00136    my_addr.sin_port = 0;
00137    if (bind(sockfd, (struct sockaddr *) &my_addr, sizeof(my_addr)) < 0)
00138    {
00139       perror("Chyba v bind");
00140       close(sockfd); exit(2);
00141    }
00142    //------------------------------------------------------------------
00143    bzero ((char *) &rem_addr, sizeof(rem_addr));
00144    rem_addr.sin_family = AF_INET;
00145    if (isdigit(argv[2][0])&&((u_short)atoi(argv[2]) > 1024))
00146       rem_addr.sin_port = htons((u_short)atoi(argv[2]));
00147    else
00148       rem_addr.sin_port = ps->s_port;                   // service port
00149    bcopy(ph->h_addr, (char *) &rem_addr.sin_addr, ph->h_length);
00150    char packet[9000];
00151    char chunk;
00152 
00153   // printf("budeme otvirat...%s \n", argv[4]);
00154    //flush(printf);
00155 
00156        config = fopen(argv[4], "r");
00157        if (config == 0) {printf("config nejde otevrit\n"); return 0   ;}
00158        else   printf("soubor otevren \n");
00159        char filename[256];
00160        int aa;
00161 while(1)
00162 {
00163        if ( 2 != fscanf(config, "%s %i", &filename, &aa)) return 0;
00164        printf("%s %i", filename, aa);
00165        iii = 0;
00166               input = fopen(filename, "r");
00167        if (input == 0) printf("nefunguje");
00168        while (iii < aa)
00169    {
00170           chunk = getc(input);
00171           packet[iii] = chunk;
00172           iii++;
00173           printf("%c",chunk);
00174    }
00175        fclose(input);
00176 
00177    strcpy(sbuf,argv[4]);
00178    len = strlen(sbuf);
00179    printf("Odesilana zprava(%i): %s\n", len, sbuf);
00180 
00181    if ((len = sendto(sockfd, packet, iii, 0, (struct sockaddr *) &rem_addr, sizeof(rem_addr))) < 0)
00182    {
00183       perror("Chyba ve vysilani");
00184       close(sockfd); exit(3);
00185    }
00186    printf("Odeslano %i\n", len);
00187        wait_for_ms(50);
00188 }
00189    close(sockfd);
00190 }

void wait_for_ms ( int  ms  ) 

Definition at line 18 of file psender.c.

00019 {
00020        double sec = (double)ms / 1000;
00021        sec *= CLOCKS_PER_SEC;
00022        clock_t wait = clock() + sec;
00023        while(clock() < wait){}
00024        return;
00025 }


Generated on Tue Mar 10 14:41:36 2009 for VRUT by  doxygen 1.5.5