[ mrki @ 24.09.2002. 18:26 ] @
htons() -- "Host to Network Short"
htonl() -- "Host to Network Long"
...

Dali neko moze da mi rastumaci ove funkcije, kada se koriste i sta se dobija. Man page nije bas pomogao. Sta bi trebalo biti recimo:
#define port 25000
...
...=htons(port); <---ovo.
[ doomed @ 24.09.2002. 21:42 ] @
da li ti je odgovoreno na ovo pitanje?....posto je forum bio "oboren".....
[ mrki @ 25.09.2002. 00:45 ] @
jok
[ bm101 @ 25.09.2002. 05:07 ] @

htons() i htonl() koriste se kada komuniciras sa klijentom za koji ne znas koji byte order (BIG ili LITTLE endian) koristi, pa onda lepo svoje podatke stavljas u network byte order. Mada ovo je ustaljena praksa, tj. SVAKAKO ne smes da pretpostavljas da druga strana koristi bilo BIG bilo LITTLE endian.

[ doomed @ 25.09.2002. 11:32 ] @
lepo rece covek....prebacuje u TCP/IP network byte order...da ne bi bilo zbunjivanaj na onoj drugoj strani.....
[ bm101 @ 25.09.2002. 13:12 ] @
A evo i jednog primera (deo naravno) koji uzima IP adresu hosta s'kojim smo u kontaktu. Naravno prvo moras da se connect() -ujes.

Code:

  sockaddr_in peer;
        int nSize(sizeof(peer)), nResult(0);

        // Now let's see the IP address of the host!
        if (!(nResult = GetPeerName((struct sockaddr*) &peer, &nSize))) {

            nResult = GetLastError();
            CString sMsg;

            sMsg.Format("GetPeerName() returned %d!",nResult);

            AfxMessageBox(sMsg, MB_OK);
            // we are still connected
            bCurrentStatus = true;
        }else {
            // decode it...
            m_dwAddress = (DWORD) htonl(peer.sin_addr.S_un.S_addr);
            bCurrentStatus = true;
        } 


Ovaj deo koda koristim u OnConnect dogadjaju klase CAsyncSocket. Naravno pricam o MFC-u i Windowsu. Koliko tebi treba pod Linuxom, ali ovaj kod, bez WIN API funkcija (GetLastError, AfxMessageBox i CString klasa), radi i pod Linuxom. Jedna napomena: socket api funkcije ovde su pozivane kao metode klase CAsyncSocket, pa zato nigde nema id socket-a koji one imaju kao parametar.

Naravno ove funkcije nisu prakticne za bilo sta sto je vece od 32 bita (DWORD), pa je onda bolje da koristis external data representation (XDR).

Pogledaj pod man xdr.
[ leka @ 25.09.2002. 13:29 ] @

Ja bih samo dodao na ovo da postoje i BIENDIAN platforme, kao sto je PowerPC ...

Citat:
bm101:

htons() i htonl() koriste se kada komuniciras sa klijentom za koji ne znas koji byte order (BIG ili LITTLE endian) koristi, pa onda lepo svoje podatke stavljas u network byte order. Mada ovo je ustaljena praksa, tj. SVAKAKO ne smes da pretpostavljas da druga strana koristi bilo BIG bilo LITTLE endian.


[ Dejan Lozanovic @ 25.09.2002. 14:58 ] @
Da pokusam ja da ti to objasnim prostim jezikom. Svi racunari ne koriste isti nacin skladistenje podataka u memoriju. Tako da je integer razlicito zapisan u bitskom obliku na razlicitim racunarima. E sada posto je TCP/IP nezavistan od arhitekture racunara bilo je potrebno standardizovati nacin zapisa informacije. htons je skracenica od recenice "Host to network short" tako da pored htons i htonl imas i ntohs i ntohl.

[ mrki @ 25.09.2002. 16:12 ] @
Hvala Dejane ovaj odgovor je razjasnio sve dileme. Sad naravno razumem i ostale poruke...thank's.