Bagikan melalui


Urutan Byte

Perawatan harus selalu diambil untuk memperkirakan perbedaan antara urutan byte yang digunakan untuk menyimpan bilangan bulat oleh arsitektur host dan pengurutan byte yang digunakan pada kawat oleh protokol transportasi individu. Setiap referensi ke alamat atau nomor port yang diteruskan ke atau dari rutinitas Windows Sockets harus dalam urutan jaringan (big-endian) untuk protokol yang digunakan. Dalam kasus IP, ini termasuk alamat IP dan parameter port dari struktur sockaddr (tetapi bukan parameter sin_family ).

Sejumlah sistem UNIX beroperasi pada CPU yang mewakili bilangan bulat dalam urutan byte jaringan (big-endian). Jadi kebutuhan untuk mengonversi bilangan bulat dari urutan byte host ke urutan byte jaringan dapat diabaikan tanpa menyebabkan masalah bahkan jika ini tidak direkomendasikan untuk portabilitas.

Sebaliknya, urutan byte yang digunakan untuk mewakili bilangan bulat oleh sebagian besar CPU IntelĀ® adalah little-endian. Jadi menjadi wajib bahwa bilangan bulat dikonversi dari urutan byte host ke urutan byte jaringan sebelum digunakan dalam fungsi dan struktur Winsock Sockets.

Pertimbangkan aplikasi yang biasanya menghubungi server pada port TCP yang sesuai dengan layanan waktu, tetapi menyediakan mekanisme bagi pengguna untuk menentukan port alternatif. Nomor port yang dikembalikan oleh getservbyname sudah dalam urutan jaringan, yang merupakan format yang diperlukan untuk membuat alamat sehingga tidak diperlukan terjemahan. Namun, jika pengguna memilih untuk menggunakan port yang berbeda, dimasukkan sebagai bilangan bulat, aplikasi harus mengonversi ini dari host ke urutan jaringan TCP/IP (menggunakan fungsi htons atau WSAHtons ) sebelum menggunakannya untuk membangun alamat. Sebaliknya, jika aplikasi menampilkan jumlah port dalam alamat (dikembalikan oleh getpeername misalnya), nomor port harus dikonversi dari jaringan ke urutan host (menggunakan fungsi ntohs atau WSANtohs ) sebelum dapat ditampilkan.

Karena pesanan byte Intel dan Internet berbeda, konversi yang dijelaskan di sebelumnya tidak dapat ditolak. Penulis aplikasi diperingatkan bahwa mereka harus menggunakan fungsi konversi standar yang disediakan sebagai bagian dari Winsock daripada menulis kode konversi mereka sendiri karena implementasi Winsock di masa depan cenderung berjalan pada sistem yang urutan hostnya identik dengan urutan byte jaringan. Hanya aplikasi yang menggunakan fungsi konversi standar antara host dan urutan byte jaringan yang cenderung portabel.

getpeername

getservbyname

htonl

htons

ntohl

ntohs

Porting Aplikasi Soket ke Winsock

sockaddr

Pertimbangan Pemrograman Winsock

WSAHtonl

WSAHtons

WSANtohl

WSANtohs