fungsi inet_addr (winsock.h)
Fungsi inet_addr mengonversi string yang berisi alamat desimal putus-putus IPv4 menjadi alamat yang tepat untuk struktur IN_ADDR .
Sintaks
unsigned long inet_addr(
const char *cp
);
Parameter
cp
TBD
Menampilkan nilai
Jika tidak ada kesalahan yang terjadi, fungsi inet_addr mengembalikan nilai panjang yang tidak ditandatangani yang berisi representasi biner yang sesuai dari alamat Internet yang diberikan.
Jika string dalam parameter cp tidak berisi alamat Internet yang sah, misalnya jika sebagian alamat "a.b.c.d" melebihi 255, maka inet_addr mengembalikan nilai INADDR_NONE.
Pada Windows Server 2003dan kemudian jika string dalam parameter cp adalah string kosong, maka inet_addr mengembalikan nilai INADDR_NONE. Jika NULL diteruskan dalam parameter cp , maka inet_addr mengembalikan nilai INADDR_NONE.
Pada Windows XPand sebelumnya jika string dalam parameter cp adalah string kosong, maka inet_addr mengembalikan nilai INADDR_ANY. Jika NULL diteruskan dalam parameter cp , maka inet_addr mengembalikan nilai INADDR_NONE.
Keterangan
Fungsi inet_addr menginterpretasikan string karakter yang ditentukan oleh parameter cp . String ini mewakili alamat Internet numerik yang dinyatakan dalam standar Internet ".'' Notasi. Nilai yang dikembalikan adalah angka yang cocok untuk digunakan sebagai alamat Internet. Semua alamat Internet dikembalikan dalam urutan jaringan IP (byte yang diurutkan dari kiri ke kanan). Jika Anda meneruskan " " (spasi) ke fungsi inet_addr , inet_addr mengembalikan nol.
Pada Windows Vista dan yang lebih baru, fungsi RtlIpv4StringToAddress dapat digunakan untuk mengonversi representasi string alamat IPv4 ke alamat IPv4 biner yang diwakili sebagai struktur IN_ADDR . Pada Windows Vista dan yang lebih baru, fungsi RtlIpv6StringToAddress dapat digunakan untuk mengonversi representasi string alamat IPv6 ke alamat IPv6 biner yang diwakili sebagai struktur IN6_ADDR .
Alamat Internet
Nilai yang ditentukan menggunakan ".'' notasi mengambil salah satu formulir berikut:a.b.c.d a.b.c a.b a
Ketika empat bagian ditentukan, masing-masing ditafsirkan sebagai byte data dan ditetapkan, dari kiri ke kanan, ke 4 byte alamat Internet. Ketika alamat Internet dilihat sebagai kuantitas bilangan bulat 32-bit pada arsitektur Intel, byte yang disebut di atas muncul sebagai "d.c.b.a''. Artinya, byte pada prosesor Intel dipesan dari kanan ke kiri.
Bagian-bagian yang membentuk alamat dalam notasi "." dapat berupa desimal, oktal, atau heksadesimal seperti yang ditentukan dalam bahasa C. Angka yang dimulai dengan "0x" atau "0X" menyiratkan heksadesimal. Angka yang dimulai dengan "0" menyiratkan oktal. Semua angka lainnya ditafsirkan sebagai desimal.
Nilai alamat internet | Makna |
---|---|
"4.3.2.16" | Desimal |
"004.003.002.020" | Oktal |
"0x4.0x3.0x2.0x10" | Heksadesimal |
"4.003.002.0x10" | Campuran |
Fungsi inet_addr mendukung notasi desimal, oktal, heksadesimal, dan campuran untuk string yang diteruskan dalam parameter cp .
Ketika alamat dua bagian ditentukan, bagian terakhir ditafsirkan sebagai kuantitas 24-bit dan ditempatkan di alamat jaringan paling kanan 3 byte. Ini membuat format alamat dua bagian nyaman untuk menentukan alamat jaringan Kelas A sebagai "net.host''.
Ketika hanya satu bagian yang diberikan, nilai disimpan langsung di alamat jaringan tanpa pengaturan ulang byte.
Windows Phone 8: Fungsi ini didukung untuk aplikasi Windows Phone Store di Windows Phone 8 dan yang lebih baru.
Windows 8.1 dan Windows Server 2012 R2: Fungsi ini didukung untuk aplikasi Windows Store di Windows 8.1, Windows Server 2012 R2, dan yang lebih baru.
Contoh
Contoh kode berikut menunjukkan cara menggunakan fungsi inet_addr .
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
// need link with Ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")
int __cdecl main(int argc, char **argv)
{
//-----------------------------------------
// Declare and initialize variables
WSADATA wsaData;
int iResult;
unsigned long ulAddr = INADDR_NONE;
// Validate the parameters
if (argc != 2) {
printf("usage: %s <IPv4 address>\n", argv[0]);
printf(" inetaddr converts a string containing an\n");
printf(" IPv4 address in one of the supported formats\n");
printf(" to a unsigned long representing an IN_ADDR\n");
printf(" %s 192.168.16.34\n", argv[0]);
return 1;
}
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
//--------------------------------
// Call inet_addr(). If the call succeeds,
// the result variable will hold a IN_ADDR
ulAddr = inet_addr(argv[1]);
if ( ulAddr == INADDR_NONE ) {
printf("inet_addr failed and returned INADDR_NONE\n");
WSACleanup();
return 1;
}
if (ulAddr == INADDR_ANY) {
printf("inet_addr failed and returned INADDR_ANY\n");
WSACleanup();
return 1;
}
printf("inet_addr returned success\n");
// Here we could implement code to retrieve each address and
// print out the hex bytes
// for(i=0, ptr= (Char*) &ulAddr; i < 4; i++, ptr++) {
WSACleanup();
return 0;
}
Persyaratan
Klien minimum yang didukung | Windows 8.1, Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | winsock.h (termasuk Winsock2.h, Winsock.h) |
Pustaka | Ws2_32.lib |
DLL | Ws2_32.dll |
Lihat juga
IN6_ADDR