hi all
I try to create a mina codes for socket server.
package test;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.logging.MdcInjectionFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ServerChatProtocolHandler extends IoHandlerAdapter {
@Override
public void sessionCreated(IoSession session) {
System.out.println("------------------------sessionCreated: ");
}
@Override
public void messageReceived(IoSession session, Object message) {
Logger log = LoggerFactory.getLogger(ServerChatProtocolHandler.class);
log.info("received: " + message);
System.out.println("------------------------received: " + message);
session.write("go away!!!");
System.out.println("Send go away");
}
}
package test;
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.example.echoserver.ssl.BogusSslContextFactory;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.filter.logging.MdcInjectionFilter;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class Main {
private static final int PORT = 1234;
public static void main(String[] args) throws Exception {
NioSocketAcceptor acceptor = new NioSocketAcceptor();
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
chain.addLast("codec", new ProtocolCodecFilter(new
TextLineCodecFactory()));
acceptor.setHandler(new ServerChatProtocolHandler());
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("Listening on port " + PORT);
}
}
Run Main , Try to connect it via Flex. "------------------------sessionCreated:
" print. If send message to 1234 via flex, Main do not retrieve message.
remove "DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();" and
"chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));"
Run Main , Try to connect it via Flex. "------------------------sessionCreated:
" print. If send message to 1234 via flex, Main retrieve message.
But it seems some exception print when session send message to Flex.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in
[jar:file:/E:/mp3/slf4j-1.5.8/slf4j-1.5.8/slf4j-jdk14-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/E:/mp3/slf4j-1.5.8/slf4j-1.5.8/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/E:/mp3/slf4j-1.5.8/slf4j-1.5.8/slf4j-nop-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/E:/mp3/slf4j-1.5.8/slf4j-1.5.8/slf4j-jcl-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Listening on port 1234
------------------------sessionCreated:
------------------------received: HeapBuffer[pos=0 lim=12 cap=2048: 66 6C 65 78
20 6D 65 73 73 61 67 65]
2009-7-22 18:40:49 test.ServerChatProtocolHandler messageReceived
信息: received: HeapBuffer[pos=0 lim=12 cap=2048: 66 6C 65 78 20 6D 65 73 73 61
67 65]
Send go away
2009-7-22 18:40:49 test.ServerChatProtocolHandler exceptionCaught
警告: Unexpected exception.
java.lang.IllegalStateException: Don't know how to handle message of type
'java.lang.String'. Are you missing a protocol encoder?
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.flushNow(AbstractPollingIoProcessor.java:738)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.flush(AbstractPollingIoProcessor.java:648)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$500(AbstractPollingIoProcessor.java:56)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:895)
at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
How to fix it? thank you very much
_________________________________________________________________
与任何您希望的人分享您的回忆。
http://www.microsoft.com/china/windows/windowslive/products/photos-share.aspx?tab=1