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

Reply via email to