소켓 프로그래밍은 소켓을 이용한 통신 프로그래밍을 뜻하는데, 소켓(socket)이란 프로세스간의 통신에 사용되는 양쪽 끝단(endpoint)를 의미합니다.
서로 멀리 떨어진 두 사람이 통신하기 위해서 전화기가 필요한 것처럼, 프로세스간의 통신을 위해서는 그 무언가가 필요하고 그것이 바로 소켓입니다.
자바에서는 java.net패키지를 통해 소켓 프로그래밍을 지원하는데, 소켓통신에 사용되는 프로토콜의 종류에 따라 다른 종류의 소켓을 구현하여 제공합니다.
그럼 TCP 소켓프로그래밍과 UDP 소켓 프로그래밍중에 이번 시간에서는 TCP소켓 프로그래밍에 대해서 알아보도록 하겠습니다.
먼저 TCP와 UDP의 차이점에 대해서 알아보도록 하겠습니다. 쉽게 설명하면 TCP를 전화에 비유하고 UDP는 소포에 비유를 합니다.
TCP는 데이터를 전송하기 전에 먼저 상대편과 연결을 한 후에 데이터를 전송하며 잘 전송되었는지 확인하고 전송에 실패했다면 해당 데이터를 재 전송하기 때문에 신뢰있는 데이터의 전송이 요구되는 통신에 적합합니다. ( 파일송수신에 적합 )
UDP는 상대편과 연결하지 않고 데이터를 전송하며, 데이터를 전송하지만 데이터가 바르게 수신되었는지 확인하지 않기 때문에 데이터가 전송되었는지 확인할 길이 없습니다. 또한 데이터를 보낸 순서대로 수신한다는 보장이 없습니다. 대신 이러한 확인과정이 필요하지 않기 때문에 TCP에 비해 빠른 전송이 가능합니다. 게임이나 동영상의 데이터를 전송하는 경우와 같이 데이터가 중간에 손실되어 좀 끊기더라도 빠른 전송이 필요할 때 적합합니다. 이때 전송 순서가 바뀌어 늦게 도착한 데이터는 무시하면 됩니다.
TCP 소켓 프로그래밍
- 클라이언트와 서버간의 일대일 통신입니다. 먼저 서버프로그램이 실행되어 클라이언트 프로그램의 연결요청을 기다리고 있어야합니다.
- 서버 프로그램에서는 서버소켓을 사용해서 서버 컴퓨터의 특정 포트에서 클라이언트의 연결요청을 처리할 준비를 합니다.
- 클라이언트 프로그램은 접속할 서버의 IP주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청합니다.
- 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트이 소켓과 연결되도록 합니다.
- 이제 클라이언트의 소켓과 새로 생성된 서버 소켓은 서버소켓과 관계없이 일대일 통신을 합니다.
서버소켓(Serversocket)은 포트와 결합(bind)되어 포트를 통해 원격 사용자의 연결요청을 기다리다가 연결요청이 올때마다 새로운 소켓을 생성하여 상대편 소켓과 통신할 수 있도록 연결합니다. 여기까지가 서버소켓의 역할이고, 실제적인 데이터 통신은 소켓과 소켓간에 이루어 집니다.
ServerSocket - 포트와 연결되어 외부의 연결요청을 기다리다 연결요청이 들어오면, Socket을 생성해서 소켓과 소켓간의 통신이 이루어지도록 합니다. 한 포트에 하나의 ServerSocket만 연결할 수 있습니다.
Socket - 프로세스간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있습니다. 이 두 스트림을 통해 프로세스간의 통신(입출력)이 이루어집니다.
아래 TCP 소켓 프로그래밍 예제를 보시고 실행해 보시길 바랍니다.
TCP 서버측 프로그램.
TCP 클라이언트 프로그램
Gson을 이용한 json을 객체에 담기 (0) | 2021.04.08 |
---|---|
자바 List를 String[]로 변환 방법 (0) | 2019.08.22 |
URL ( Uniform Resource Location ), URLConnection (0) | 2019.08.16 |
자바에서의 네트워크 프로그래밍(InetAddress) (0) | 2019.07.28 |
직렬화 두번째 시간 (0) | 2019.07.28 |
댓글 영역