CS/Network

소켓 프로그래밍

prden 2022. 4. 21. 20:59

소켓 프로그래밍이란? 

소켓을 이용한 통신 프로그래밍을 뜻한다. 소켓이란 프로세스 간의 통신에 사용되는 양쪽 끝단을 의미한다. ex) 전화기

 

자바에서는 java.net패키지를 통해 소켓 프로그래밍을 지원하는데, 소켓통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다. 

 

1. TCP와 UDP

tcp는 연결기반, 연결 후 통신, 1:1 통신방식이다. 데이터의 경계를 구분 안 하고 신뢰성 있는 데이터를 전송한다. 데이터의 전송 순서가 보장되고 데이터의 수신 여부를 확인한다. 관련 클래스로는 Socket, ServerSocket이 있다. 

반면, udp는 비연결기반이며, 연결 없이 통신이 되며, 1:1, 1:n, n:n 통신방식이다. 데이터의 경계를 구분하고(datagram) 신뢰성 없는 데이터를 전송한다. 따라서 데이터의 전송 순서가 바뀔 수 있으며 데이터의 수신 여부를 확인 안 한다. 이로 인해 TCP 보다 전송속도가 빠르다. 

관련 클래스로는 DatagramSocket, DatagramPacket, MuticastSocket이 있다. 

 

2. TCP 소켓 프로그래밍

TCP 소켓 프로그래밍은 클라이언트와 서버 간의 일대일 통신이다. 먼저 서버 프로그램이 실행되어 클라이언트 프로그램의 연결 요청을 기다리고 있어야 한다. 

순서는 다음과 같다. 

 

1.서버 프로그램에서는 서버 소켓을 사용해서 서버 컴퓨터의 특정 포트에서 클라이언트의 연결 요청을 처리할 준비를 한다. 

2. 클라이언트 프로그램은 접속할 서버의 IP주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다. 

3. 서버 소켓은 클라이언트의 연결 요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트의 소켓과 연결되도록 한다. 

4. 이제 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버 소켓과 관계없이 일대일 통신을 한다. 

 

-> 서버소켓은 포트(특정 포트 독점)와 결합되어 포트를 통해 원격 사용자의 연결 요청을 기다리다가 연결 요청이 올 때마다 새로운 소켓을 생성하여 상대편 소켓과 통신할 수 있도록 연결한다. //여기까지가 서버 소켓의 역할이고 실제적인 데이터 통신은 소켓과 소켓 간에 이루어진다. 

소켓들이 데이터를 주고받는 연결통로는 바로 입출력 스트림이다. 

 

소켓은 두 개의 스트림, 입력스트림과 출력 스트림을 갖고 있다. 한 소켓의 입력 스트림은 상대편 소켓의 출력 스트림과 연결되고 출력 스트림은 입력 스트림과 연결된다. 

 

1) Socket : 프로세스간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다. 이 두 스트림을 통해 프로세스 간의 통신이 이루어진다. 

 

2) ServerSocket 포크와 연결되어 외부의 연결 요청을 기다리다 연결 요청이 들어오면, Socket을 생성해서 소켓과 소켓 간의 통신이 이루어지도록 한다. 

 

3) 서버에 접속하는 클라이언트의 수가 많을 때는 쓰레드를 이용해서 클라이언트의 요청을 병렬적으로 처리하는 게 좋다. 그렇지 않으면 서버가 접속을 요청한 순서대로 처리하기 때문에 늦게 접속을 요청한 클라이언트는 오랜 시간을 기다릴 수 있다. 

 

-> 멀티채팅서버 프로그램 공부 

 

'CS > Network' 카테고리의 다른 글

CURL(Client URL)  (0) 2022.09.15
IP 주소 묶는 법 CIDR  (0) 2022.06.01
네트워크 확인을 위한 명령어  (0) 2022.03.13
window host 파일  (0) 2022.03.13
ping이란  (0) 2022.03.13