문제

Java에서는 Socket 또는 DatagramSocket 생성자의 단일 매개변수로 숫자 0을 제공할 수 있습니다.그런 다음 Java는 해당 소켓을 사용 가능한 포트에 바인딩합니다.포트 조회를 특정 범위로 제한할 수 있습니까?

도움이 되었습니까?

해결책

흠, 문서를 읽은 후에는 할 수 없을 것 같습니다.임의의 포트에 바인딩한 다음 허용되지 않는 경우 다시 바인딩하거나 성공할 때까지 해당 범위의 포트에 반복적으로 바인딩할 수 있습니다.두 번째 방법이 가장 "효율적"입니다.

나는 이 대답이 불안하기 때문에...우아하지 않지만 다른 것도 찾을 수 없습니다 :/

다른 팁

소켓을 사용 가능한 포트에 바인딩하는 것은 (일반적으로) 운영 체제의 소켓 지원 기능입니다.그것은 자바에만 국한된 것이 아닙니다.예를 들어 Solaris는 다음을 통해 임시 포트 범위 조정을 지원합니다. ndd 명령.그러나 루트만이 범위를 조정할 수 있으며 이는 프로그램뿐만 아니라 전체 시스템에 영향을 미칩니다.

일반적인 임시 바인딩 동작이 요구 사항에 맞지 않으면 아마도 Socket.bind()를 사용하여 직접 작성해야 할 것입니다.

필요한 코드는 다음과 같습니다.

public static Socket getListeningSocket() {
    for ( int port = MIN_PORT ; port <= MAX_PORT ; port++ )
    {
        try {
            ServerSocket s = new ServerSocket( port );
            return s;      // no exception means port was available
        } catch (IOException e) {
            // try the next port
        }
    }
    return null;   // port not found, perhaps throw exception?
}

사용 중인 함수를 구현하는 Java 코드를 한눈에 살펴볼 수 있습니다.대부분의 Java 라이브러리는 Java로 작성되므로 거기에서 필요한 내용을 확인할 수 있습니다.

@Kenster가 옳고 시스템 작업이라고 가정하면 각 포트에 바인딩하려는 포트를 반복하거나 테스트해야 할 수도 있습니다.조금 고통스럽긴 하지만, 코드 몇 줄을 넘지 않아야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top