Klient usługi time (UDP)

Klient usługi time (UDP)
0

Witam.

Piszę klienta standardowej usługi time w wersji UDP (Linux, C). Proszę o pomoc w napisaniu jak odebrać czas.

To co mam w tej chwili nie działa:

Kopiuj
send(gniazdo,NULL,0,0); //wysyłam pusty pakiet
char dane[MAX_BUFOR]; //tworzę bufor na dane
recv(gniazdo, &dane, MAX_BUFOR,0); //odbieram dane od usługi
int tmp = ntohl(atoi(dane)); //zamieniam dane na liczbę
printf("Czas: %s\n",ctime(&tmp)); //wyświetlam czas

Gdzie robię błąd ?? Proszę naprowadźcie mnie na właściwe tory.

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Szczecin
2

W jakim formacie spodziewasz się danych? http://tools.ietf.org/html/rfc5905 ?

Kopiuj
ntohl(atoi(dane));

To jest kompletna bzdura - zupełnie nie rozumiesz jak te funkcje działają. Albo spodziewasz się danych tekstowych i używasz atoi (lub sscanf), albo binarnych i używasz funkcji z rodziny ntohl. Ale najprawdopodobniej powinieneś spodziewać się struktury wobec czego oba naiwne podejścia nie będą działać.


0

Dziękuję. Spodziewam się 32 bitowej liczby binarnej. Już rozumiem mój błąd. W RFC jest napisane:

When used via UDP the time service works as follows:

S: Listen on port 37 (45 octal).

U: Send an empty datagram to port 37.

S: Receive the empty datagram.

S: Send a datagram containing the time as a 32 bit binary number.

U: Receive the time datagram.

The server listens for a datagram on port 37. When a datagram
arrives, the server returns a datagram containing the 32-bit time
value. If the server is unable to determine the time at its site, it
should discard the arriving datagram and make no reply.

Co za tym idzie, muszę wysłać pusty datagram i odebrać czas. Już nad tym pracuję :P. Jeszcze raz dziękuję.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.