본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로프로그래밍 › Java › 입출력과 네트워크

SocketAddress 클래스와 NetworkInterface 클래스

목차

SocketAddress 클래스와 NetworkInterface 클래스

SocketAddress는 네트워크 끝점을 나타내는 추상 클래스다. IP 주소와 포트 번호가 필요한 TCP/UDP 코드에서는 하위 클래스인 InetSocketAddress를 주로 사용한다. 실제 연결을 수행하는 Socket과 연결 대상의 주소를 나타내는 SocketAddress는 역할이 다르다.

1. InetSocketAddress: 주소와 포트 묶기

import java.net.InetSocketAddress;
import java.net.Socket;

InetSocketAddress endpoint = new InetSocketAddress("example.com", 443);
if (endpoint.isUnresolved()) {
    throw new IllegalArgumentException("호스트 이름을 확인할 수 없습니다");
}
try (Socket socket = new Socket()) {
    socket.connect(endpoint, 3_000); // 연결 제한 시간: 3초
}

new InetSocketAddress(host, port)는 호스트 이름의 주소 확인을 시도한다. 이름을 확인하지 못한 경우에도 객체가 만들어질 수 있고, isUnresolved()로 그 상태를 확인한다. 반면 InetSocketAddress.createUnresolved(host, port)는 의도적으로 조회를 미룬다. 연결 실패 후 주소 객체에 unresolved 표시가 생기는 것은 아니다. 연결 실패는 Socket 쪽의 예외로 다룬다.

new InetSocketAddress(port)는 모든 로컬 주소를 뜻하는 와일드카드 주소와 포트를 만든다. 서버 소켓을 특정 포트에 바인딩할 때 사용하며, 외부 호스트를 가리키는 방식은 아니다. SocketAddress 자체는 연결을 생성하지 않는다. 자세한 생성자와 상태 규칙은 Java InetSocketAddress API를 참고한다.

2. NetworkInterface: 로컬 네트워크 장치 확인하기

NetworkInterface는 시스템의 물리 또는 가상 네트워크 장치를 나타낸다. 이름, 표시 이름, 연결된 IP 주소, 루프백 여부 등을 조회할 수 있다.

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

try {
    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
    while (interfaces.hasMoreElements()) {
        NetworkInterface device = interfaces.nextElement();
        System.out.println(device.getName() + " / " + device.getDisplayName());
        for (Enumeration<InetAddress> addresses = device.getInetAddresses();
             addresses.hasMoreElements(); ) {
            System.out.println("  " + addresses.nextElement().getHostAddress());
        }
    }
} catch (SocketException e) {
    System.err.println("네트워크 장치 목록을 읽지 못했습니다: " + e.getMessage());
}

getByName(name)으로 장치 하나를 찾을 수도 있다. getInterfaceAddresses()는 IP 주소 외에 네트워크 접두 길이 같은 정보가 필요할 때 사용한다. 장치 목록과 IP 할당은 실행 중 바뀔 수 있으므로 조회 결과를 영구적인 네트워크 상태로 가정하지 않는다. Java NetworkInterface API에 메서드와 예외가 정리돼 있다.

같은 카테고리의 글