На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Как узнать время на сервере ( сервер специальный, предназначенный для , синхронизации времени ) Например с сервером time.windows.com
      Здраствуйте!
      Есть временной сервер time.windows.com !
      Как узнать время этого сервера программно?
      Пробовал работать про протоколу NTP (описание брал тут: http://ru.wikipedia.org/wiki/NTP )
      Пробовал так:
      ExpandedWrap disabled
                 WSADATA wsa;
            SOCKET server = INVALID_SOCKET;
            struct hostent *pHostent = NULL;
            struct sockaddr_in ServerAddr;
            CHAR szBuffer[1024];
         
            if(WSAStartup(MAKEWORD(2, 2), &wsa) != 0)       // Init Socket
            {
                return 0;
            }
         
            server = socket(AF_INET, SOCK_DGRAM, 0 ); // Create Socket Handle
            if(server == INVALID_SOCKET)
            {
                return 0;
            }
         
            ServerAddr.sin_family = AF_INET;
            ServerAddr.sin_port = htons( 13 );
            ServerAddr.sin_addr.S_un.S_addr = inet_addr( "time.windows.com" );
            if(ServerAddr.sin_addr.S_un.S_addr == INADDR_NONE)
            {
                pHostent = gethostbyname( "time.windows.com" );
                if(pHostent == NULL)
                    return 0;
         
                // Fill Sockaddr_in Structure
                ServerAddr.sin_addr.S_un.S_addr = *(DWORD *)pHostent->h_addr_list[0];
            }
         
            if(connect(server, (struct sockaddr*)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR)
            {
                return 0;
            }
         
            CHAR lNetTime[1000];
            int t = recv( server, (CHAR*)&lNetTime, sizeof(lNetTime), 0 );
         
         
            if(server != INVALID_SOCKET)
                closesocket(server);
         
            WSACleanup();
         
            return 0;


      Почему то происходит зависание на строчке int t = recv( server, (CHAR*)&lNetTime, sizeof(lNetTime), 0 );
      Кто знает, в чём может быть проблема?
      Сообщение отредактировано: VictorRT -
        Цитата VictorRT @
        Почему то происходит зависание на строчке int t = recv( server, (CHAR*)&lNetTime, sizeof(lNetTime), 0 );

        Не зависание, а блокировка... сокет то блокирующий.:) Со временем не работал могу предположить что серверу надо послать какие то данные в виде запроса.
        Сообщение отредактировано: Urich -
          Прочитать нужно не только википедию, но и унылые рфц. Там что-то про хелло говорится.
            Цитата Alexandoros @
            Прочитать нужно не только википедию, но и унылые рфц

            На данном этапе о такой вещи еще не известно.:)
            Сообщение отредактировано: Urich -
              так там ссылки прям на странице википедии
                Цитата VictorRT @
                ..Пробовал работать про протоколу NTP...

                про протокол и протоколы, читать тут а не ширпотребовскую википедию.

                http://www.rfc-editor.org/rfc/rfc1165.txt


                удачи Вам
                (круглый)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0259 ]   [ 16 queries used ]   [ Generated: 28.04.24, 07:46 GMT ]