alle ich werde chatroom verwenden netty für server schreiben. und flash für den Client. Das Protokoll verwendet json string mit "\ r \ n" end.Ich schreibe drei Handler "MessageDecoder", "MessageHandler", "MessageEncoder". und verwenden Sie den Flash-Client, um eine Nachricht zu senden. aber ich bekomme folgende Fehler.Wie Netty für Chatraum zu verwenden. flash client
java.lang.IllegalStateException: decode() method must read at least one byte if it returned a frame (caused by: class com.mbaobao.chatroom.socket.handlers.MessageDecoder)
at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:294)
at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
MessageDecoder
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer)
throws Exception {
logger.debug("message decode");
if (buffer.readableBytes() < 4) {
return null;
}
StringBuffer stringBuffer = new StringBuffer();
String json = null;
for (int i = 0; i < buffer.capacity(); i++) {
char c = (char) buffer.getByte(i);
logger.info(c);
stringBuffer.append(c);
if (c == 13 || c == 10) {
json = stringBuffer.toString();
break;
}
}
ChatData chatData = JSON.parseObject(json, ChatData.class);
return chatData;
}
ich nie Socket-Programm schreiben. nur wissen, verwenden Sie Multi Thread-Management-Socket. aber ich denke, es ist schrecklich. also benutze ich Netty. aber ich weiß nicht, wie man es für Chatroom benutzt.
kann mir jemand empfehlen?
Bitte geben Sie die vollständige Quelle der Klasse MessageDecoder. – Vincent