problem: zeitabrage über sntp



  • hi!

    ich hoffe ich poste dies in dem richtigen channel.
    ich möchte eine zeitabfrage über sntp machen. alles schön und gut, nur leider bekomm ich da nie daten zurück, kann wer mir hier helfen? danke

    programmiert wird c++ unter LINUX

    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    
    typedef struct bit_LI_VN_Mode
    {
        unsigned char LI:2;
        unsigned char VN:3;
        unsigned char Mode:3;
    } LI_VN_MODE;
    
    /*************************************************************************/
    // NTP structure declaration 
    /*************************************************************************/ 
    typedef struct _SNTPHDR 
    { 
       LI_VN_MODE	 LI_VN_Mode;
       unsigned char Stratum; 
       unsigned char Poll; 
       unsigned char Precision; 
       unsigned long Root_Delay; 
       unsigned long Root_Dispersion; 
       unsigned long Reference_Identifier; 
       unsigned long Reference_Timestamp1; 
       unsigned long Reference_Timestamp2; 
       unsigned long Originate_Timestamp1; 
       unsigned long Originate_Timestamp2; 
       unsigned long Receive_Timestamp1; 
       unsigned long Receive_Timestamp2; 
       unsigned long Transmit_Timestamp1; 
       unsigned long Transmit_Timestamp2; 
    } SNTPHDR;
    
    int main (int argc, char *argv[])
    {
        SNTPHDR sntphdr, recvhdr;
        int sock;
        int result;
        struct sockaddr_in saddr;
    
        memset(&sntphdr, 0, sizeof(SNTPHDR));
        memset(&recvhdr, 0, sizeof(SNTPHDR));
        sntphdr.LI_VN_Mode.VN = 3;
        sntphdr.LI_VN_Mode.Mode = 3;
    
        saddr.sin_family      = AF_INET;
        saddr.sin_port        = htons(123); // NTP port 123
        inet_aton ("at.pool.ntp.org", &saddr.sin_addr);
    
        sock = socket(AF_INET, SOCK_DGRAM, 0);
    
        result = connect(sock, (struct sockaddr*)&saddr, sizeof(saddr));
        if(result < 0)
            perror("connect");
    
        result = send(sock, (char*)&sntphdr, (ssize_t)sizeof(SNTPHDR), 0);
        if(result < 0)
            perror("send");
    
        result = recv(sock, (char*)&recvhdr, sizeof(SNTPHDR), 0);
        if(result < 0)
            perror("recv");
    
        close(sock);
    
        return 0;
    }
    

    danke


Anmelden zum Antworten