티스토리 뷰
TCP는 연결 지향적 프로토콜이다.
클라이언트가 연결을 요청하고, 서버가 연결을 수락하면 통신 선로가 고정되고 , 모든 데이터는 고정된 통신 선로를 통해서 순차적으로 전달된다.
장점
TCP는 데이터를 정확하고 안정적으로 전달한다.
단점
데이터를 보내기 전에 반드시 연결이 형성되어야 하고(시간이 많이 소요), 고정된 통신 선로가 최단선이 아닐 경우 상대적으로 UDP 통신보다 데이터 전송 속도가 느릴 수 있다.
TCP 서버의 역할은 두 가지
- 클라이언트가 연결 요청을 하면 연결을 수락하는 것.
- 연결된 클라이언트와 통신하는 것.
자바에서는 두 역할 별로 별도의 클래스를 제공하고 있다.
- 클라이언트가 연결 요청을 하면 연결을 수락하는 것.(java.net.ServerSocket)
- 연결된 클라이언트와 통신하는 것.(java.net.Socket)
클라이언트가 연결 요청을 해오면 ServerSocket은 연결을 수락하고 통신용 Socket 만듬.
서버는 클라이언트가 접속할 포트를 가지고 있어야 하는데, 이 포트를 바인딩 포트라 칭한다.
ServerSocket을 생성할 때 포트 번호 하나를 지정한다. (위 그림에서 6001번)
서버가 실행되면 클라이언트는 서버 IP주소, 바인딩 포트 번호로 Socket을 생성해서 연결 요청한다.
ServerSocket은 클라이언트가 연결 요청을 해오면 accept() 메소드로 연결 수락을 하고 통신용 Socket을 생성한다.
이후 클라이언트와 서버는 각각의 Socket을 이용해서 데이터를 주고받는다.
실습예제
서버쪽 코드이다.
클라이언트 코드
콘솔창에 결과를 보면 (왼쪽 : 클라이언트 ㅡ 오른쪽 : 서버)
readByteCount는 byte배열에 담긴 byte수를 보내기 위해 임시로 출력해봤습니다.
1. 요청을 기다리고 있는 서버가 클라이언트 요청을 받고 연결상태
2. 연결 후 클라이언트에서 데이터(자바로 TCP 네트워크 공부해보자.) 보내기 , 서버에서 데이터 받음
3. 서버에서도 데이터(서버가 데이터 잘 받았다)를 클라이언터로 전송, 클라이언트에서 데이터 받음