1
저는 현재 구축중인 응용 프로그램 용 프레임 디코더를 구현했습니다. 지금까지 코드를 실행할 때 패킷이 잘 디코딩되어 수신 된 패킷을 볼 수 있으며 올바른 것입니다. 가/** * @author 아르센 * */Netty Framedecoder 오류
public class SmpPduFrameDecoder extends FrameDecoder {
private static Logger logger = LoggerFactory.getLogger(SmpPduFrameDecoder.class);
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel,
ChannelBuffer buffer) throws Exception {
ChannelBuffer leFrame = null;
// Check the Endianness of the packet sent
if(buffer.order() == ByteOrder.BIG_ENDIAN){
if(buffer.hasArray()){
leFrame = ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, buffer.array(), buffer.arrayOffset(), buffer.capacity());
}
else{
leFrame = ChannelBuffers.wrappedBuffer(buffer.toByteBuffer().order(ByteOrder.LITTLE_ENDIAN));
}
}
// Read the byte length
// wait until the length prefix is available
if (leFrame.readableBytes() < 4) {
logger.debug("Unable to Read the Length");
return null;
}
// parse the frame length (first 4 bytes)
int frameLength = leFrame.getInt(leFrame.readerIndex());
logger.info("Packet Received Length " + frameLength);
// wait until the whole data is available
if (leFrame.readableBytes() < frameLength) {
logger.debug("Unable to read the full PDU received");
return null;
}
leFrame.skipBytes(4);
int readerIndex = leFrame.readerIndex();
ChannelBuffer frame = leFrame.readBytes(frameLength);
leFrame.readerIndex(readerIndex+frameLength);
byte[] byteArray = frame.array();
StringBuilder sb = new StringBuilder();
for(byte b : byteArray){
sb.append(HexUtil.toHexString(b));
}
logger.info("Decode Frame Received without the length " +sb.toString());
logger.debug("Full PDU has been read");
return frame;
}
}
누군가가 말해 줄 수 잘못 eith이 무엇 :
decode() method must read at least one byte if it returned a frame (caused by: class com.smsgh.unitysmpp.Plugins.Smp.SmpPduFrameDecoder)
at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:434)
at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:84)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:471)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:332)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
이 내가 쓴 코드는 : 그러나 나는 예외를 얻고있다 내 코드 및 그 예외를 해결하는 데 도움이?