티스토리 뷰

분류없음

타임서버2

BulGoGuMa 2009.07.14 09:30
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <stdio.h>
#include <time.h>
#include "timeIP.h"
 
#define TRUE 1
/* UDP - Socket   TIME  -  SERVER */



/* liest die Systemzeit und addiert die Anzahl der
   Sekunden seit 1900 dazu. */

unsigned long Read_SysTime()
{
   time_t t;
   time(&t);
   return (t + 2208988800);
}



main()
{
   int sock, lenClient, lenServer ;
   struct sockaddr_in server, client;
   char buf[60];
   unsigned long *timelong;
   char timestring[6];
   
   sock = socket( AF_INET, SOCK_DGRAM, 0 );
   if (sock == -1) {
                     perror(" opening DATAGRAM socket !!!");
                     exit(1);
                   }
   
   server.sin_family = AF_INET;
   server.sin_addr.s_addr = htonl(INADDR_ANY);
   server.sin_port = htons(S_PORT);
   if (bind( sock, (struct sockaddr *) &server, sizeof server) == -1)
                  {
                    perror(" binding DATAGRAM socket !!!");
                    exit(1);
                  }
   
   
   lenServer = sizeof(server);
   if (getsockname (sock, (struct sockaddr *) &server, &lenServer) == -1)
                  {
                    perror(" getting DATAGRAM socket name !!!");
                    exit(1);
                  }

 
   printf( "Der Server laueft auf dem Socket port #%d\n", 
                     ntohs(server.sin_port));
   
   /*fuer UDP - Verbindung: */
         
   lenClient = sizeof(client);
   
   do
   {
   memset(buf, 0, sizeof buf);
   recvfrom(sock, buf, sizeof(buf), 0, 
                  (struct sockaddr *) & client, &lenClient);
   printf( "\nAnfrage > %s < empfangen \n", buf); 
        if (strcmp(ENDE, buf)==0) break; 

        *timelong = Read_SysTime();
        memcpy( (char *)timestring, (char *)timelong, 4);

/* timestring[0]=
        timestring[1]=
        timestring[2]=
        timestring[3]=
*/
        timestring[4]='\0';
   
        sendto(sock, timestring, 4 , 0,
                   (struct sockaddr *) & client, sizeof(client)); 
   printf( "... und %s geschickt\n", timestring); 
   }
   while(TRUE);     
   /* Ende: UDP - Verbindung */
   

   printf( "\nKommunikation beenden !!!\n");
   close(sock);
   exit(0);
}
  

                

댓글
댓글쓰기 폼