2012-01-03 2 views
1

socking 프로그래밍 API를 사용하여 클라이언트/서버 응용 프로그램을 작성하고 있습니다.을 사용하면 사용할 포트 번호를 알 수 있습니까?

connect()를 호출하기 전에 클라이언트 측에서 사용할 포트 번호를 알 수 있습니까? 내가 지금 가지고있는 소켓 파일 디스크립터는 socket()을 호출한다. getsockname을 사용하려고했지만 포트 번호는 0뿐입니다.

+0

연결하려는 소켓 또는 쓸 소켓을 의미합니까? – dbeer

답변

0

포트 번호가 0 인 경우에도 bind()을 명시 적으로 호출 할 수 있습니다. 그 후에는 getsockname() 포트를 제공해야합니다.

2

bind(2) (포트 = 0 및/또는 addr = 0)을 호출 할 때까지 할당 된 주소/포트가 없습니다. 바인드 한 후 getsockname을 사용할 수 있습니다.

+0

그리고'connect'는 이전에 명시 적으로 호출되지 않았다면'bind'를 의미합니다. –

2

완전히 소켓 프로그래밍을 처음 사용하는 경우 Beej's Guide to Network Programming을 읽기를 강력히 권장합니다.

그러나 TCP 소켓으로 질문에 대답하려면 (서버가 bind()도 수행하는) 연결하려는 원격 포트를 알아야합니다. 그러나 일반적으로 (클라이언트 응용 프로그램 프로그래머)는 서버가 회신에 사용하는 포트를 지정하지 않습니다. 클라이언트가 사용할 수있는 포트 번호를 기반으로 TCP 스택에 의해 임의로 선택됩니다.

+0

클라이언트 측에서 임의로 선택된 포트는 일반적으로 '임시 포트'라고합니다. – greatwolf

+0

@ 빅터 이게 더 정확하다고 지금 말 하시겠습니까? –

+0

문제가 있습니다. bind()를 사용할 때 포트 번호를 올바르게 가져올 수 있습니다. 그러나 올바른 IP 주소를 가져올 수 없습니다. – flyingbin

관련 문제