본문 바로가기

IT Trend

에코 서비스 분석

1. EchoClient


- EchoClient는 자신이 보낸 데이터를 다시 자신이 받는 프로그램. 

- 가장 기초적인 서버 프로그래밍을 보여준다.

- 에코서비스는 사용자가 입력한 문자를 서버가 받아 그대로 사용자에게 돌려주는 기본적인 프로그램이다.

- EchoClient 프로그램은 사용자로 부터 입력 받은 문자열을 서버로 보낸다. 

- 서버가 보낸 문자열을 화면 상에 출력해준다.




<EchoClient의 소스코드>



1)  Socket sock = new Socket("127.0.0.1", 10001);  // 클라이언트 소켓 인스텀스 생성. ip 주소와 소켓 넘버를 입력한다.

2) BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));

// 콘솔상에서 사용자가 입력한 데이터를 읽어들이는 스트림 생성!

3) OutputStream out = sock.getOutputStream(); //서버로 데이터를 보내는 출력 스트림 생성!

4) InputStream in = sock.getInputStream(); // 서버로 부터 데이터를 읽어들이는 입력스트림 생성!

5) PrintWriter pw = new PrintWriter(new OutputStreamWriter(out)); //문자열을 출력 할 수 있는 필터스트림 장착!

6) BufferedReader br = new BufferedReader(new InputStreamReader(in)); //문자를 빠르게 받아올 수 있는 버퍼필터스트림 장착!

7) while((line = keyboard.readLine()) != null) //사용자의 입력을 받아들인다.

8) if(line.equals("quit")) break; // 만약 사용자가 quit를 반환 할때 while문을 빠져 나온다.

9) pw.println(line); // 사용자가 입력한 문자열을 서버에 전달한다.

10) pw.flush(); // 버버를 비운다.

11) String echo = br.readLine(); //서버가 전달한 문자를 읽어온다. 

12) System.out.println("서버에서 읽은 문자열­ :" + echo);// 서버로부터 읽어온 문자열을 출력한다.

13) pw.close(); //스트림 종료

     br.close(); //스트림 종료

     sock.close();//소켓 종료



2. EchoServer


- EchoClient가 보낸 문자열을 받아 다시 EchoClient에게 보내준다.

- 하나의 EchoClient가 EchoServer를 차지하면 다른 클라이언트들은 이 서버를 사용할 수 없다.



<EchoServer의 소스코드>




1) ServerSocket server = new ServerSocket(10001); // 10001 소켓 넘버를 가진 서버소켓 인스턴스 생성

2) Socket sock = server.accept(); // 클라인언트의 접속을 기다린다.

3) InetAddress inetaddr = sock.getInetAddress(); //클라이언트의 ip주소를 가져온다.

4) OutputStream out = sock.getOutputStream(); //클라이언트에 데이터를 전달해줄 출력스트림 생성! 

5) InputStream in = sock.getInputStream(); // 클라이언트에 데이터를 전달해줄 수 있는 입력스트림 생성. 

6) PrintWriter pw = new PrintWriter(new OutputStreamWriter(out)); // 문자열을 출력해 줄수 있는 필터스트림 장착!

7) BufferedReader br = new BufferedReader(new InputStreamReader(in)); // 문자열을 빠르게 읽어들일 수 있는 버터 필터스트림 장착!

8) while((line = br.readLine()) != null){ // 클라이언트로 부터 문자열을 읽어 온다.

9) System.out.println(" 클라이언트가 보낸 문자열­ : " + line);

10) pw.println(line); //다시 클라이언트로 문자열을 보낸다.

11) pw.close(); // 스트림 종료

     br.close(); // 스트림 종료

     sock.close(); // 소켓 종료



3. EchoThreadServer



- 기존 EchoServer와는 다르게 EchoTreadServer는 Thread를 생성하는 서버이다.

- 레드를 클라이언트가 접속 할 때마다 생성하여, 메인 서버는 오직 클라이언트의 접속을 받아주고, 

  각각의 클라이언트에 스레드를 할당 해주는 역할을 한다.

- 때문에 쓰레드를 이용하여 많은 클라이언트의 접속을 허용한다.


 

<EchoThreadServer의 소스코드(1) >


<<메인 메소드에서의 실행을 보여주고자 한다.>>



1) ServerSocket server = new ServerSocket(10001); // 서버 소켓 인스턴스 생성.

2) Socket sock = server.accept(); //클라이언트의 접속을 기다린다.

3) EchoThread echothread = new EchoThread(sock); 

   // 클라이언트가 접속 했다면, 스래드를 생성하고 소켓의 참조변수를 전달한다. 

4) echothread.start(); //쓰레드 실행!!




<EchoThread 소스코드 (2)>



1) InetAddress inetaddr = sock.getInetAddress(); // 클라이언트의 주소값을 반환한다.

2) OutputStream out = sock.getOutputStream(); //클라이언트로 데이터를 보낼 수 있는 출력스트림 생성. 

3) InputStream in = sock.getInputStream(); // 클라이언트로부터 데이터를 읽어올 수 있는 입력스트림 생성

4) PrintWriter pw = new PrintWriter(new OutputStreamWriter(out)); // 문자열을 출력할 수 있는 필터스트림 장착!

5) BufferedReader br = new BufferedReader(new InputStreamReader(in));

   // 빠르게 문자열을 읽어올수있는 버퍼필터스트림 장착!

6) while((line = br.readLine()) != null)  //클라이언트로부터 문자열을 읽어 온다. 

7) pw.println(line); // 읽어온 문자열을 다시 클라이언트로 보낸다! echo!!



4. EchoServer와 EchoThreadServer의 차이점 


 /* 가장 큰 차이점은 역시 쓰레드의 존재 유무이다. EchoServer의 경우는 클라이언트가 접속하면, 다른 클라이언트는 접속이 불가능해당 서버를 그 클라이언트가 차지하고 있기 때문EchoThreadServer의 메인 서버는 단순히 클라이언트를 맞이하는 용도로만 쓰이고, 메인 서버가 쓰레드를 클라이언트에게 각각 할당해주어 여러 클라이언트가 동시에 해당 서버를 이용할 수 있게 한다.

*/

'IT Trend' 카테고리의 다른 글

EchoServer 분석소스  (0) 2016.12.12
EchoClient 분석소스  (0) 2016.12.12
Chat 서비스 분석  (0) 2016.12.12
객체란 무엇인가?  (0) 2016.10.10
객체지향으로 무인시스템 설계하기  (0) 2016.10.10