소켓이란 두 호스트 사이의 연결을 말한다. 소켓은 아래와 같은 기본적인 7가지 기능을 수행한다.
⊙ 원격 장비에 연결하기(connect)
⊙ 데이터 보내기(send)
⊙ 데이터 받기(recv)
⊙ 연결 닫기(close)
⊙ 포트 지정하기(bind)
⊙ 수신 대기하기(listen)
⊙ 지정된 포트에 대해 원격 장비의 연결 받아들이기(accept)
자바의 Socket 클래스는 위에 나열된 기능 각각에 해당하는 메소드를 제공하며, 앞의 네 개는 서버와 클라이언트 모두에서 사용되고, 나머지 세 개는 클라이언트의 접속을 대기하는 기능으로 서버에서만 사용된다.
자바 프로그램은 보통 다음과 같은 방법으로 클라이언트 소켓을 사용한다.
⊙ 프로그램은 Socket 클래스의 생성자를 사용하여 새로운 소켓을 만든다.
⊙ 생성된 소켓은 원격 호스트에 연결을 시도한다.
연결되는 즉시 로컬 호스트와 원격 호스트는 각각의 소켓으로부터 입력 스트림과 출력 스트림을 얻게 되고, 서로 데이터를 주고 받는 데 이 스트림을 사용한다.
이러한 연결은 두 호스트가 동시에 데이터를 주고 받을 수 있다(full-duplex).
그리고 이 연결을 통해 주고받는 데이터는 프로토콜에 따라 의미가 다르다.
즉, HTTP 서버와 FTP 서버는 서로 다른 명령을 보낸다. 일반적으로 서로간의 데이터를 주고 받기 전에 미리 약속된 핸드셰이킹 작업을 수행한다.(3way-HandShaking)
데이터 전송이 완료되면 어느 한쪽이나 양쪽에서 연결을 닫는다.
일부 프로토콜에서는 요청이 완료될 때마다 연결을 종료하는 경우도 있고, FTP와 HTTP 1.1과 같은 다른 프로토콜은 한번의 연결로 다수의 요청을 처리하는 것이 가능하다.
'JAVA > 네트워크 프로그래밍' 카테고리의 다른 글
[JAVA] 소켓 생성과 연결(Client) (0) | 2016.09.05 |
---|---|
[JAVA] 소켓으로 서버에 쓰기(Client) (0) | 2016.09.03 |
[JAVA] 소켓으로 서버에서 읽기(Client) (0) | 2016.09.03 |
[JAVA] 데이터그램과 소켓의 개요 (0) | 2016.09.03 |
[JAVA] 입출력 스트림(Input Output Stream) (3) | 2016.08.28 |