sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
sitelink5 | |
sitelink6 |
getServerPort(), getLocalPort() 두 개를 같이 설명하는 것이 이해하기 빠를 것 같으니, 쉬운 것부터 먼저 설명해보겠습니다.
getRemotePort(); 이 메서드 이름을 보고 바로 드는 의문은 어디로부터 원격(Remote)이냐는 것입니다.
서버가 이 질문을 했다면 서버의 원격인 클라이언트가 원격일 테고, 클라이언트가 이 질문을 했다면 서버가 원격일 것입니다.
그런데 이 코드는 당연하게도 서버에서 수행되는 코드입니다.
따라서 getRemotePort()는 요청을 보낸 클라이언트의 포트를 의미합니다.
getServerPort()는 "요청이 들어온 서버 포트는 어딘가?"라는 질문을 던졌을 때 바로 그 포트를 말합니다.
그 다음 getLocalPort()는 "그래서 결국 서버의 어떤 포트에 요청이 물렸는데?"에서의 포트입니다.
부연 설명하자면, 사용자의 요청은 서버가 리스닝하고 있는 특정 포트로 들어옵니다.
요청이 한 두개 들어오는 것이 아니므로, 서버는 각각의 요청을 새로운 포트를 만들어 스레드를 할당하여 처리합니다.
이것이 바로 동시에 여러 클라이언트를 핸들링하는 방식입니다.
여기서 처음 들어오는 포트가 바로 ServerPort이고, 스레드를 위한 포트가 LocalPort입니다."