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:

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.

2

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

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ę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1