Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

htons() htonl()...?

[es] :: C/C++ programiranje :: htons() htonl()...?

[ Pregleda: 4142 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mrki
radnik
Sombor

Član broj: 1050
Poruke: 580
62.108.126.*

Jabber: mrki@elitesecurity.org
ICQ: 58816584


Profil

icon htons() htonl()...?24.09.2002. u 18:26 - pre 262 meseci
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.
Nekad sam bio mlad ;)
 
Odgovor na temu

doomed
NS/PO

Član broj: 736
Poruke: 180
*.ptt.yu



Profil

icon Re: htons() htonl()...?24.09.2002. u 21:42 - pre 262 meseci
da li ti je odgovoreno na ovo pitanje?....posto je forum bio "oboren".....
Ako treba onda nema potrebe
 
Odgovor na temu

mrki
radnik
Sombor

Član broj: 1050
Poruke: 580
62.108.126.*

Jabber: mrki@elitesecurity.org
ICQ: 58816584


Profil

icon Re: htons() htonl()...?25.09.2002. u 00:45 - pre 262 meseci
jok
Nekad sam bio mlad ;)
 
Odgovor na temu

bm101
Vanja Tesin
Yu/Zr

Član broj: 1961
Poruke: 44
*.zre.sezampro.yu



Profil

icon Re: htons() htonl()...?25.09.2002. u 05:07 - pre 262 meseci

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.

 
Odgovor na temu

doomed
NS/PO

Član broj: 736
Poruke: 180
*.ptt.yu



Profil

icon Re: htons() htonl()...?25.09.2002. u 11:32 - pre 262 meseci
lepo rece covek....prebacuje u TCP/IP network byte order...da ne bi bilo zbunjivanaj na onoj drugoj strani.....
Ako treba onda nema potrebe
 
Odgovor na temu

bm101
Vanja Tesin
Yu/Zr

Član broj: 1961
Poruke: 44
*.zre.sezampro.yu



Profil

icon Re: htons() htonl()...?25.09.2002. u 13:12 - pre 262 meseci
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.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: htons() htonl()...?25.09.2002. u 13:29 - pre 262 meseci

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 Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.beograd-3.tehnicom.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: htons() htonl()...?25.09.2002. u 14:58 - pre 262 meseci
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.


 
Odgovor na temu

mrki
radnik
Sombor

Član broj: 1050
Poruke: 580
*.ptt.yu

Jabber: mrki@elitesecurity.org
ICQ: 58816584


Profil

icon Re: htons() htonl()...?25.09.2002. u 16:12 - pre 262 meseci
Hvala Dejane ovaj odgovor je razjasnio sve dileme. Sad naravno razumem i ostale poruke...thank's.
Nekad sam bio mlad ;)
 
Odgovor na temu

[es] :: C/C++ programiranje :: htons() htonl()...?

[ Pregleda: 4142 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.