2020년 9월 10일 목요일

(동영상,자바네트워크)멀티쓰레드 Echo Client, Server, 자바소켓프로그래밍

(동영상,자바네트워크)멀티쓰레드 Echo Client, Server, 자바소켓프로그래밍 

 

이전 예제인 EchoServer의 경우 동시에 여러 개의 클라이언트를 처리하는데 있어서는 read 메소드의 Blocking으로 인해 어려움이 있다.

즉 동시에 여러 클라이언트의 요구를 처리 하지 못한다.

이문제를 해결하기 위해 다중 스레딩(Multi-Threading)을 구현한 서버를 사용하는 것이다.

다중 스레드 서버는 클라이언트가 접속 할때 마다 1개 이상의 스레드를 만들어 돌리기 때문에 블록킹 I/O 문제를 해결해 준다.

즉 메인 스레드는 클라이언트의 연결을 받기만 하고 클라이언트와 데이터를 주고 받는 일은 별도의 Thread에서 처리 하도록 구성한다.

 

이전 예제의 클라이언트는 그대로 두고 서버만 다시 작성하자.

 

package socket;

 

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

 

class MultiThreadEchoServer extends Thread {  

protected Socket sock;

//----------------------- Constructor

MultiThreadEchoServer (Socket sock) { this.sock = sock;}

public void run() {

try   {                

                System.out.println(sock + ": 연결됨");

 

         InputStream fromClient = sock.getInputStream();

                OutputStream toClient = sock.getOutputStream();

                byte[] buf = new byte[1024];         int count;

                while( (count = fromClient.read(buf)) != -1 ) {

                    toClient.write( buf, 0, count );

        System.out.write(buf, 0, count);

   }

                toClient.close();

                System.out.println(sock + ": 연결 종료");

catch( IOException ex )   {

System.out.println(sock + ": 연결 종료 (" + ex + ")");

 

finally {

try   {

if ( sock != null )  sock.close();

catch( IOException ex ) {}

}        

}

 

//------------------------------------

public static void main( String[] args )   throws IOException    {

        ServerSocket serverSock = new ServerSocket( Integer.parseInt(args[0]) );

        System.out.println(serverSock + ": 서버 소켓 생성");

 

while(true)        {

Socket client = serverSock.accept();

MultiThreadEchoServer myServer = new MultiThreadEchoServer(client);

myServer.start();

        }

    }

}

 

 

#멀티쓰레드, #자바멀티쓰레드, #자바소켓, #자바소켓프로그래밍, #자바동영상, #JAVA, #자바, #멀티쓰레드서버, #MultiThread, #자바멀티쓰레드서버, #자바채팅, #자바채팅프로그램, #자바강의, #자바강좌, #자바네트워크, #자바네트워크강의 

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...