시소당
프로그래밍에서의 포트란 물리적 장치가 아닌 가상적인 연결장치를 의미한다. 하나의 컴퓨터가 HTTP나 FTP등의 여러 서버를 제공한다면 클라이언트는 호스트의 HTTP 서버에 접속할 것인지 아니면 FTP 서버에 접속할 것인지를 결정해야할 것이다. 이때 포트라는 개념이 사용된다. 포트는 0~65535 사이의 번호를 가지는데 HTTP 서버는 보통 80번 포트를 사용하고 FTP 서버는 21번 포트를 사용한다. 이 말은 80번 포트를 통해 접속해오는 클라이언트는 HTTP 서버로 연결하고 21번 포트를 통해 접속해오는 클라이언트는 FTP 서버로 접속된다는 뜻이다.
[그림 21-2] port의 개념
21번이나 80번과 같은 포트들은 잘 알려진 포트들(Well Known Ports)이고, 이와 같이 시스템에서 사용하는 예약된 포트들이 있는데 1~1023 사이의 포트들이다. 따라서 이들 포트는 사용하지 않고 1024~65535 사이의 포트를 사용하는 것이 좋다.
일반적으로 전구나 플러그를 꽂을 수 있는 장치를 소켓이라고 부른다. 일반적인 소켓은 전기를 소비하는 제품과 전선을 서로 이어주는 역할을 하는데, 이와 비슷한 개념으로 프로그래밍에서의 소켓은 응용프로그램과 포트를 이어주는 역할을 한다. 소켓은 소프트웨어적으로 구현한 가상적 장치이다.
[그림 21-3] 소켓의 개념
자바는 소켓을 클래스로 추상화하였다. 따라서 프로그래머는 소켓 클래스로부터 소켓 객체를 생성하여 사용하면 된다. 여기서 자바는 데이터의 전송을 어떻게 구현할까? 마찬가지로 소켓의 스트림 객체를 이용하여 데이터를 주고받는다. 소켓은 내부에 입·출력 스트림을 포함하고 있는데 소켓의 스트림 객체를 얻어와서 스트림에 데이터를 읽거나 쓸 수 있다. 예를 들어 소켓의 출력 스트림에 데이터를 쓰면 반대편에서는 소켓의 입력 스트림으로부터 데이터를 읽으면 되는 것이다. 다음 그림을 보면 쉽게 이해될 것이다.
[그림 21-4] 소켓의 스트림
소켓을 이용하는 통신을 소켓 통신이라고 하며, 소켓 통신 프로그램을 만드는 작업을 소켓 프로그래밍이라고 한다.
출처 : http://java.pukyung.co.kr/Lecture/Chapter21.php