이 작업을 수행하는 한 가지 방법은 Address.name을 사용하여 core.sys.posix.sys.socket.sockaddr
구조에 대한 포인터를 얻는 것입니다. auto saddr_ptr = results[0].address.name;
과 같은 것입니다. 그런 다음이 포인터를 적절한 유형의 포인터로 캐스팅하여 필요한 데이터를 추출 할 수 있습니다 (주소 패밀리에 따라 다름).
module main;
import std.stdio;
import std.socket;
import std.c.linux.socket: sockaddr_in, in_addr;
void main(string[] args) {
// auto results = getAddressInfo("www.digitalmars.com");
try {
Address[] addresses = getAddress("dlang.org", 80);
writefln(" %d addresses found.", addresses.length);
foreach (int i, Address a; addresses) {
writefln(" Address %d:", i+1);
writefln(" IP address: %s", a.toAddrString());
writefln(" Hostname: %s", a.toHostNameString());
writefln(" Port: %s", a.toPortString());
writefln(" Service name: %s", a.toServiceNameString());
auto saddr_ptr = a.name;
auto in_ptr = *(cast(sockaddr_in*) saddr_ptr);
// let's convert it to ubyte[4] so we can access individual
// parts of the IPv4 address.
writeln(cast(ubyte[4])(in_ptr.sin_addr));
}
} catch (SocketException e) {
writefln(" Lookup error: %s", e.msg);
}
// Lets the user press <Return> before program returns
stdin.readln();
}
출력 :
3 addresses found.
Address 1:
IP address: 162.217.114.56
Hostname: digitalmars.com
Port: 80
Service name: http
[162, 217, 114, 56]
Address 2:
IP address: 162.217.114.56
Hostname: digitalmars.com
Port: 80
Service name: http
[162, 217, 114, 56]
Address 3:
IP address: 162.217.114.56
Hostname: digitalmars.com
Port: 80
Service name: http
[162, 217, 114, 56]
여기
는 uint32_t 값으로에게 주소를 제공하고 [4] 배열 ubyte하도록 Conver 유럽하기 SOCKADDR의 *를 사용 getAddress에() 문서의 변형 예 std.c.linux.socket을 가져 오려고 할 때 오류가 발생했습니다 (더 이상 사용되지 않습니다). 따라서 uint ipno = new InternetAddress (ip, 80) .addr(); – Vlam