본문 바로가기
IT/JAVA

TCP/IP 통신을 이용한 인증 테스트 모듈 만들기 (2) 

by barrr 2023. 10. 11.

이 전에 만들었던 Client와 통신 테스트를 위한 Server 를 간단하게 만들어 보았다.

클라이언트의 요청을 받기만 하면 되고, client 를 만들면서 흐름을 익히다 보니 비교적 쉬웠다.

 

[Server]

public class Server {  

    ServerBootstrap serverBootstrap = new ServerBootstrap();

    serverBootstrap.group(bossGroup, workerGroup)
            .channel(NioServerSocketChannel.class)
            .childHandler(new ChannelInitializer<SocketChannel>() {
                @Override
                protected void initChannel(SocketChannel ch) {
                    ChannelPipeline pipeline = ch.pipeline();
    
                    pipeline.addLast(new ServerHandler());
                }
            });
    
    ChannelFuture channelFuture = serverBootstrap.bind(PORT).sync();
}

 

[ServerHandler]

public class ServerHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {

        ByteBuf in = (ByteBuf) msg;
        byte[] data = new byte[in.readableBytes()];
        in.readBytes(data);

        // 받은 바이트를 문자열로 디코딩
        String receivedString = new String(data);
        System.out.println("response from Server : " + receivedString);
        System.out.println("byte length : " + receivedString.length());

        if( receivedString.contain("test poll") ) {

            String response = "test 요청이 성공적으로 서버에 도착!";
            snedResMsg( ctx, response );
        }
    }

    void sendResMsg ( ChannelHandlerContext ctx, String response ) {
    
        ByteBuf responseBuffer = ctx.alloc().buffer(response.length());
        responseBuffer.writeBytes(response.getBytes());
    
        ctx.writeAndFlush(responseBuffer);
        
    }
}

Handler 에서는 클라이언트에서 test poll 요청을 받으면 성공적으로 도착했다는 응답을 보내도록 구현하였다.

클라이언트에서 decode() 메서드가 존재하였던 이유다.

 

Netty 프레임 워크를 사용한 클라이언트에서 요청을 보내면

channelRead()

에서 서버가 요청을 받는 것을 확인할 수 있다.

 

간단하게 tcp/ip 통신을 Netty 프레임 워크를 사용하여 server까지 만들었다. 
다음에는 SSL 설정을 적용한 client, server 그리고 server가 없는 경우 client 테스트 방법을 작성해보려고 한다.