IT박스

localhost에서 무료 포트 번호를 어떻게 선택합니까?

itboxs 2020. 6. 18. 21:33
반응형

localhost에서 무료 포트 번호를 어떻게 선택합니까?


프로세스 간 통신을 사용하려고하는데 Windows에서 명명 된 파이프를 사용하는 방법을 알 수 없으므로 네트워크 소켓을 사용할 것이라고 생각했습니다. 모든 것이 로컬에서 발생합니다. 서버는 별도의 프로세스에서 슬레이브를 시작하고 일부 포트에서 수신 대기합니다. 노예들은 그들의 일을하고 그 결과를 마스터에게 제출합니다. 사용 가능한 포트를 어떻게 알 수 있습니까? 포트 80 또는 21을 수신 할 수 없다고 가정합니까?

선택을 줄이는 경우 Python을 사용하고 있습니다.

감사!


특정 포트에 바인딩하거나 포트 0에 바인딩하지 마십시오 (예 :) sock.bind(('', 0)). 그러면 OS가 사용 가능한 포트를 선택합니다. 를 사용하여 선택한 포트를 가져 와서 sock.getsockname()[1]다시 연결할 수 있도록 슬레이브에 전달할 수 있습니다.


소켓을 포트 0에 바인드하십시오. 1024에서 65535 사이의 임의의 사용 가능한 포트가 선택됩니다. getsockname()바로 다음으로 선택한 포트를 검색 할 수 있습니다 bind().


사람들이 위에서 설명한 것을 발췌하기 위해 :

import socket
from contextlib import closing

def find_free_port():
    with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
        s.bind(('', 0))
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        return s.getsockname()[1]

원하는 포트에서들을 수 있습니다. 일반적으로 사용자 응용 프로그램은 포트 1024 이상 (65535를 통해)을 청취해야합니다. 리스너가 가변적 인 경우 가장 중요한 것은 20000-21000 및 CATCH EXCEPTIONS 와 같이 앱에 범위를 할당하는 것 입니다. 컴퓨터에서 포트를 사용할 수 없는지 (다른 프로세스에서 사용하는 경우) 알 수 있습니다.

그러나 바인드에 실패하면 오류 메시지를 인쇄하는 한 리스너에 단일 하드 코드 포트를 사용하는 데 문제가 없어야합니다.

또한 대부분의 소켓 (슬레이브 용)은 특정 포트 번호에 명시 적으로 바인딩 될 필요가 없습니다. 여기에서 마스터와 같이 들어오는 연결을 기다리는 소켓 만 리스너가되어 포트에 바인딩되어야합니다. 포트를 사용하기 전에 소켓에 ​​대해 포트를 지정하지 않으면 OS는 사용 가능한 포트를 소켓에 할당합니다. 마스터가 데이터를 보내는 슬레이브에 응답하려고 할 때, 리스너가 데이터를 수신하면 발신자의 주소에 액세스 할 수 있습니다.

나는 이것을 위해 UDP를 사용할 것이라고 생각합니까?

참고 URL : https://stackoverflow.com/questions/1365265/on-localhost-how-do-i-pick-a-free-port-number

반응형