본문 바로가기

JAVA/네트워크 프로그래밍

[JAVA] 소켓의 기능과 동작

소켓이란 두 호스트  사이의 연결을 말한다. 소켓은 아래와 같은 기본적인 7가지 기능을 수행한다.


⊙ 원격 장비에 연결하기(connect) 

⊙ 데이터 보내기(send)               

⊙ 데이터 받기(recv)

⊙ 연결 닫기(close)

⊙ 포트 지정하기(bind)

⊙ 수신 대기하기(listen)

⊙ 지정된 포트에 대해 원격 장비의 연결 받아들이기(accept)


자바의 Socket 클래스는 위에 나열된 기능 각각에 해당하는 메소드를 제공하며, 앞의 네 개는 서버와 클라이언트 모두에서 사용되고, 나머지 세 개는 클라이언트의 접속을 대기하는 기능으로 서버에서만 사용된다.


자바 프로그램은 보통 다음과 같은 방법으로 클라이언트 소켓을 사용한다.


⊙ 프로그램은 Socket 클래스의 생성자를 사용하여 새로운 소켓을 만든다.

⊙ 생성된 소켓은 원격 호스트에 연결을 시도한다.


연결되는 즉시 로컬 호스트와 원격 호스트는 각각의 소켓으로부터 입력 스트림과 출력 스트림을 얻게 되고, 서로 데이터를 주고 받는 데 이 스트림을 사용한다.


이러한 연결은 두 호스트가 동시에 데이터를 주고 받을 수 있다(full-duplex).


그리고 이 연결을 통해 주고받는 데이터는 프로토콜에 따라 의미가 다르다.


즉, HTTP 서버와 FTP 서버는 서로 다른 명령을 보낸다. 일반적으로 서로간의 데이터를 주고 받기 전에 미리 약속된 핸드셰이킹 작업을 수행한다.(3way-HandShaking)



데이터 전송이 완료되면 어느 한쪽이나 양쪽에서 연결을 닫는다.


일부 프로토콜에서는 요청이 완료될 때마다 연결을 종료하는 경우도 있고, FTP와 HTTP 1.1과 같은 다른 프로토콜은 한번의 연결로 다수의 요청을 처리하는 것이 가능하다.