네트워크 입출력을 다루기에 앞서 필요한 네트워크 지식을 간략하게 정리하고 가겠습니다.
네트워크는 컴퓨터 사이를 통신 링크로 연결한 집합체들을 의미합니다.
일반적으로 서버
는 서비스를 제공하는 측이고, 클라이언트
는 서비스를 요청하는 쪽을 의미합니다.
데이터 통신(인터넷)에서 통신은 클라이언트가 요청을 하면, 서버는 요청을 받아 처리하고 그 결과를 다시 클라이언트로 응답하는 형태로 통신을 수행합니다.
IP 주소는 컴퓨터 네트워크에서 컴퓨터를 식별하기 위한 고유 번호입니다.
윈도우 기준으로 cmd
에서 ipconfig
명령어를 통해서 현재 네트워크의 ip 주소를 확인할 수 있습니다.
Port 번호
는 프로세스(프로그램)을 구분하기 위한 번호입니다. 포트 번호를 통해 컴퓨터 내부에서는 어떤 서버와 연결해서 프로그램을 실행할 지 결정합니다.
포트 번호
는 0~65535번 사이의 숫자를 사용할 수 있습니다. 이 중 0~1023
번 포트는 잘 알려진 포트 번호(well-known port)
라고 해서 주요 프로토콜들이 예약되어 사용되고 있습니다.
잘 알려진 포트 번호는 대표적으로 다음의 것들이 있습니다.
SSH: 22
,SMTP: 25
,DNS: 53
,HTTP: 80
,HTTPS: 442
1024~49151
번 포트는 등록된 포트(registered port)
라고 합니다. 이 번호는 특정 용도로 사용하기 위한 포트 번호들 입니다.
등록된 포트 번호는 대표적으로 다음의 것들이 있습니다.
3306: MySQL; SQL을 사용하는 RDBMS를 사용하기 위한 포트
,3389: 원격 접속
,8080: HTTP의 대체
49152~65535
번의 포트는 동적 포트(dynamic port)
라고 해서 임시적으로 할당되는 포트번호들 입니다.
java.net
패키지의 InetAddress
를 이용하면 IP 주소를 얻을 수 있습니다.
현재 로컬 컴퓨터의 IP 주소는 다음과 같이 취득합니다. 먼저 InetAddress 객체를 얻고 getHostAddress()
메소드를 이용해서 IP 주소를 취득합니다.
InetAddress 변수명 = InetAddress.getLocalHost(); //InetAddress 객체 생성
변수명.getHostAddress(); //IP 취득
특정 도메인을 알고있다면 해당 도메인의 IP 주소를 얻을 수도 있습니다.
InetAddress 변수명 = InetAddress.getByName(도메인);
InetAddress[] 변수명 = InetAddress.getAllByName(도메인);
getByName()
은 도메인 이름으로 등록된 하나의 IP 주소를 가져오고 getAllByName()
은 도메인 이름으로 등록된 모든 IP 주소를 가져옵니다.
IP 주소가 여러 개인 경우는 다수의 클라이언트가 연결할 경우 서버의 부담을 덜기위해 등록된 경우입니다.
다음은 자바에서 현재 로컬 컴퓨터의 IP 주소를 취득하는 코드입니다.
public class Main {
public static void main(String[] args) throws UnknownHostException {
InetAddress ia = InetAddress.getLocalHost();
System.out.println("IP: " + ia.getHostAddress());
}
}