프리 정보 컨텐츠

자바 Socket 클라이언트/서버 멀티쓰레드 (Multi-Thread) 구현 본문

JAVA

자바 Socket 클라이언트/서버 멀티쓰레드 (Multi-Thread) 구현

쏜스 2021. 1. 29. 02:22

동시에 여러 개의 클라이언트를 처리하는데 있어서 다중 스레딩을 구현한 서버 사용하는 방법에 대해서 알아보자.

다중 스레드 서버는 클라이언트가 접속 할 때마다 1개 이상의 스레드를 만들어서 처리하므로 자주 사용된다.

 

자바 Socket의 헷갈리는 개념 정의에 대해서 우선 정리한다.

Client

값을 밖으로 보냄 -  OutputStream

값을 읽어드림 - InputStream

Socket 생성

server

값을 쓰기위함 - OutputStream

값을 읽기위함 - InputStream

ServerSocket 생성

Socket Class

생성자

  • public Socket(InetAddress address, int port)

       IP주소를 나타내는 InetAddress 객체와 포트 번호로 소켓 객체 생성

       호스트명(IP주소), 포트번호로 소켓 객체를 생성

 

  • public Socket(String host, int port)

       호스트명(IP주소), 포트번호로 소켓 객체를 생성

 

Client 쪽에서 소켓의 생성자를 생성
자신이 접속하고싶은 서버쪽의 호스트명(IP주소), 서버의 포트번호로 접속

소켓을 생성하면 연결은 자동으로 이루어지며(서버측은 서버소켓을 만들고 대기한다 가정)
연결 시 오류가 발생하면 IOException 발생

TCP 연결에는 원격 IP 주소, 원격 포트 등이 사용됨

ServerSocket Class

생성자

  • ServerSocket(int port)

       지정한 포트에 ServerSocket 생성

 

서버 소켓은 요청이 네트워크를 통해 들어올 때까지 기다리고 
클라이언트 요청에 따라 작업을 한 후 결과를 반환.

 

ServerSocket 객체를 생성하여 클라이언트가 연결해 오기를 기다림.

클라이언트 연결해 올 때마다 요청은 요청큐(Request Queue)에 쌓임

 

각각의 클라이언트 연결에 accept함으로써 요청을 요청큐에서 꺼내고 

Socket 객체가 리턴됨.

 

리턴되는 Socket을 활용하여 클라이언트와 데이터를 주고 받으며

멀티쓰레드에서는 Socket을 생성한 쓰레드에 주어서 클라이언트를 상대함.

 

자바 소켓 통신 구조

서버 -> ServerSocket 생성 -> 무한루프에서 요청 기다림

 

1. 클라이언트 request -> 서버 accept -> socket 생성 

(socket 은 client 상대함) 

 

client - outputstream, inputstream

socket - outputstream, inputstream

스트림을 통해서 통신함

 

2, 3 클라이언트도 같은 구조로 작동하며

 

Java Thread를 통해 소켓을 전달하고 클라이언트의 요청을 상대함

 

아래 링크를 통해 Gui 채팅 프로그램 코드를 알아보자.

 

자바 멀티쓰레드 Gui 채팅 프로그램
Comments