본문 바로가기
Programming/TCP IP

자바 TCP/IP 통신 (Netty, 네티) - 3 송신

by Pendine 2021. 5. 21.
728x90

항상 늘 그랬듯이 아무것도 모를 미래의 나에게 설명한다.

 

 

이전 글에서 사용했던

부트스트랩을 연결할 때 핸들러를 등록할때 사용했던 ChannelInitializer클래스를 이용해 설명할 수 있다.

clientBootstrap.group(e)
               .option(ChannelOption.AUTO_READ, true)
               .handler(new ChannelInitializer());

ChannelInitializer클래스는 ChannelInitializer<Channel> 을 상속받았는데

( import io.netty.channel.ChannelInitializer )

 

ChannelInitializer안의 

initChannel 메소드를 오버라이딩하여 아래와 같이 정의되었다.

@Override
    protected void initChannel(Channel channel) throws Exception {
        ChannelPipeline pipeline = channel.pipeline();

        pipeline.addLast("Decoder", new Decoder());
        pipeline.addLast("Encoder", new Encoder());

    }

 

메소드는 채널객체를 받아 채널안의 파이프라인에 인코더와 디코더를 추가해주고

 

송신시 ChannelOutboundHandlerAdapter클래스를 상속받은 클래스의 encode() 메소드를 통해서 메시지를 송신할 수 있다.

 

encode() 메소드의 사용방법은 아래의 형식과 같다.

 

	@Override
	protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
		int Length = 보낼 메시지를 바이트배열로 변환했을때의 길이;
        
		//(바이트배열로 변환 가능해야함) 
		보낼메시지= (보낼메시지) msg;
        
		out = ctx.alloc().buffer(Length);
		out.writeBytes( << 설명 : 보낼 메시지를 바이트 배열 변환한다 >> );
        
		// 전송시 메소드
		ctx.writeAndFlush(out);

	}

 

일일이 타이핑 하기 너무 길다.

ChannelHandlerContext -> ctx

 

ctx를 이용하여 메시지를 상대방에게 전송하기전 보낼 메시지의 길이만큼 ByteBuf 에 할당해준뒤

ByteBuf객체에 그 만큼의 메시지 내용을 싣는것을 확인 할 수 있다.

 

그뒤 ctx의 메소드를 사용하여 ByteBuf 객체를 전송한다.

우리가 ctx.writeAndFlush( ByteBuf out ) 이 어떻게 동작하는지 몰라도

 

결국에 보낼때 사용하는 것은 ctx객체의 writeAndFlush(Object obj) 라는것을 알 수 있다.

 

 

이렇게 해서 간단하게 Netty를 이용하여 송신에 대한 설명을 종료할 수 있겠다.

 

 

728x90

'Programming > TCP IP' 카테고리의 다른 글

포트상태 대략정리  (1) 2021.12.21
wireshark capture 안뜸 오류  (0) 2021.08.24
[Netty/JAVA] 재접속 오류 확인  (0) 2021.07.21
자바 TCP/IP 통신 (Netty, 네티) - 2 수신  (0) 2021.05.11
자바 TCP/IP 통신 (Netty, 네티)  (0) 2021.05.11

댓글