-
Apache MINA를 이용한 Echo서버 구현하기프로그래밍/Java 2019. 4. 1. 23:53728x90
자바(Java)를 이용해서 서버를 구축하는 방법에는 여러가지가 있겠지만, 아파치 미나(Apache MINA)의 구현 방법인 Nio Socket과 스레드(Thread)를 이용하여 비동기-스레드(Asynchronous-Thread)방식의 서버를 구현할 수 있습니다.
https://mina.apache.org/downloads-mina_2_1.html
다운로드 가능한 공식 주소는 위와 같습니다. 위의 주소에서 .zip을 다운받아
apache-mina-버전명-bin.zip을 압축을 풀게 되면
dist폴더에 위와 같은 파일들이 나타나게 됩니다.
우리가 필요한 내용은 mina-core-버전명.jar입니다.
또한, lib폴더에서 slf4j-api-버전명.jar또한 복사하여 자신이 사용하는 IDE에 라이브러리로 추가 하면 준비 완료입니다.만약
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
와 같은 오류가 출력된다면,
https://www.slf4j.org/download.html
slf4j-버전명.zip을 다운로드 받아 내부의 slf4j-jdk14-버전명.jar도 jar include해주면 해결 됩니다.
이번 예제는 Echo Server로 말 그대로 Echo(메아리)치듯이 전송한 데이터를 그대로 반송하는 서버입니다.
123456789101112131415161718192021222324252627MainServer.javaimport java.io.IOException;import java.net.InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.core.service.IoAcceptor;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;/**** @author syudal.tistory.com*/public class MainServer {public static void main( String[] args ) throws IOException{IoAcceptor acceptor = new NioSocketAcceptor();//acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));acceptor.setHandler( new MainServerHandler() );acceptor.getSessionConfig().setReadBufferSize( 2048 );acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );acceptor.bind( new InetSocketAddress( 포트주소 ) );}}cs 12345678910111213141516171819202122232425262728293031323334353637383940414243MainServerHandler.javaimport org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;/**** @author syudal.tistory.com*/public class MainServerHandler extends IoHandlerAdapter{@Overridepublic void exceptionCaught( IoSession session, Throwable cause ) throws Exception{//오류가 있을 경우cause.printStackTrace();}@Overridepublic void messageReceived( IoSession session, Object message ) throws Exception{//메시지를 받았을 경우session.write( message.toString() );//message로 받은 데이터를 string형으로 변경하여 세션으로 전송한다.}@Overridepublic void sessionCreated( IoSession session) throws Exception{//세션이 생겼을 경우 = 클라이언트와 연결되었을 경우System.out.println("[Client] Connect " + session.getRemoteAddress());}@Overridepublic void sessionClosed( IoSession session) throws Exception{//세션이 닫혔을 경우 = 클라이언트와 연결이 끊겼을 경우System.out.println("[Client] Disconnect " + session.getRemoteAddress());}@Overridepublic void sessionIdle( IoSession session, IdleStatus status ) throws Exception{//세션이 유휴 상태에 있을 경우System.out.println( "IDLE " + session.getIdleCount( status ));}}cs 텔넷으로 접속하여 아무거나 작성하여 전송하면 그대로 되돌아오는 것을 알 수 있습니다.
참고 : http://theeye.pe.kr/archives/710
728x90'프로그래밍 > Java' 카테고리의 다른 글
[Java, Netty] PooledUnsafeDirectByteBuf을 Byte[]로 변환하기 (0) 2023.12.19 Apache MINA와 Netty의 차이 및 장단점 (0) 2023.03.05 Apache MINA와 WebSocket으로 SSL통신하기. (0) 2020.06.09 Apache MINA와 WebSocket으로 통신하기. (0) 2019.05.28 Apache FTP Server에 TLS 인증서 생성하기 (0) 2019.02.02 댓글