안녕하세요.
Netty로 TCP서버 구성해보아서 이번엔 UDP서버를 구성해보고자 합니다.
전문이 가변길이라 decode 에서 전문전체길이 추출해서 다 읽은 다음에 리턴하려고 합니다.
public class UDPBufferDecoder extends MessageToMessageDecoder<DatagramPacket> {
private static final Logger logger = LoggerFactory.getLogger(UDPBufferDecoder.class);
@Override
protected void decode(ChannelHandlerContext ctx, DatagramPacket in, List<Object> out) throws Exception {
int bufLen = in.content().readableBytes();
// set msg.header.size
int headerLen=4;
// read again if read buffer is smaller than header
if(bufLen<headerLen){
return;
}
// get total message length
byte[] headerB=new byte[headerLen];
in.content().readBytes(headerB);
int bodyLen = Integer.parseInt(new String(headerB));
int msgLen = headerLen + bodyLen; // header + body
logger.debug("bufLen={}, getMessageLength()={}", bufLen, msgLen);
// read buffer until msgLen
if(bufLen < msgLen){
in.content().resetReaderIndex(); // move to first index or marked index.
return;
}
in.content().resetReaderIndex();
out.add(in.content().readBytes(msgLen));
}
}
제가 어딘가 UDP용 decode를 잘못 사용하고 있는 것 같은데 도움 주시면 감사 드리겠습니다.